DEV Community

Uiratan Cavalcante
Uiratan Cavalcante

Posted on

DDD da massa

Ideia Chave:

O design tático no Domain-Driven Design (DDD) deve equilibrar a coesão do domínio com a utilização pragmática das tecnologias disponíveis, permitindo que o software evolua de forma ágil sem perder a clareza dos conceitos do problema que se pretende resolver.


Introdução:

O design tático no contexto do Domain-Driven Design (DDD) é uma abordagem que busca alinhar a estrutura do software aos conceitos do domínio que ele pretende resolver. No entanto, a evolução tecnológica e as ferramentas disponíveis hoje exigem um equilíbrio entre a pureza dos conceitos do domínio e a praticidade oferecida pelas tecnologias modernas. Este conteúdo explora como é possível adotar um design tático pragmático, que abraça as facilidades tecnológicas sem perder a coesão com o problema que se deseja resolver.


Pontos Estruturados:

  1. Conciliação entre Domínio e Tecnologia:

    • O design tático idealista sugere que a tecnologia utilizada não deve influenciar diretamente as construções do software, como entidades e agregados.
    • No entanto, na prática, abrir mão de um pouco desse idealismo pode acelerar o desenvolvimento, desde que os conceitos centrais do domínio sejam preservados.
  2. Exemplo Prático com Banco de Dados Relacional:

    • Ao utilizar um banco de dados relacional, é comum que metadados da tecnologia (como anotações do JPA no Java) apareçam nas entidades do domínio.
    • Isso pode ser visto como um acoplamento, mas é um trade-off que facilita a persistência e o mapeamento dos dados, sem comprometer a clareza dos conceitos do domínio.
  3. Estruturação do Código:

    • Em vez de criar camadas excessivamente desacopladas, é possível adotar uma abordagem mais direta, como utilizar classes que representam registros no banco de dados, mantendo a coesão com o domínio.
    • Por exemplo, uma classe Treinamento pode conter metadados do banco de dados (como IDs e anotações), mas ainda refletir os conceitos do domínio.
  4. Serviços de Aplicação e Infraestrutura:

    • Os serviços de aplicação podem ser simplificados, utilizando frameworks como Spring para gerenciar transações e injeção de dependências.
    • Essa abordagem reduz a complexidade do código, permitindo que o foco permaneça na lógica do domínio.
  5. Manutenção e Evolução:

    • A adoção de um design tático pragmático facilita a manutenção e a evolução do software, pois permite que mudanças tecnológicas sejam implementadas sem grandes refatorações.
    • O acoplamento controlado com a tecnologia é visto como um aliado, desde que não comprometa a clareza dos conceitos do domínio.

Conclusão:

O design tático no DDD não precisa ser rigidamente idealista. Ao adotar uma abordagem pragmática, é possível aproveitar as vantagens das tecnologias modernas sem perder a coesão com o domínio. Isso permite que o software seja desenvolvido de forma ágil e mantenha-se adaptável às mudanças, tanto no domínio quanto nas tecnologias utilizadas. A chave está em equilibrar a clareza dos conceitos do problema com a praticidade oferecida pelas ferramentas disponíveis.


Aprendizados e Insights Importantes:

  1. O design tático deve equilibrar a pureza do domínio com a praticidade das tecnologias.
  2. Metadados tecnológicos (como anotações do JPA) podem coexistir com entidades do domínio, desde que não obscureçam os conceitos centrais.
  3. A simplificação de serviços de aplicação e infraestrutura pode acelerar o desenvolvimento sem comprometer a qualidade.
  4. Um acoplamento controlado com a tecnologia pode ser benéfico, facilitando a manutenção e a evolução do software.
  5. A coesão com o problema que se deseja resolver deve sempre ser priorizada, mesmo ao adotar soluções tecnológicas pragmáticas.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

AWS GenAI LIVE!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️