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.

Top comments (0)