Domain Driven Design é uma filosofia de desenvolvimento lançada por Erick Evans. O DDD é composto por um conjunto de padrões para a construção de aplicações corporativas a partir do modelo de domínio.
Com DDD, estamos de olho nos modelos de um domínio com problema. A persistência, interfaces de usuário e outras coisas de mensagens pode vir mais tarde, é o domínio que precisa ser entendido, porque essa é a parte do sistema que está sendo construído que distingue negócios da sua empresa de seus concorrentes.
Quando digo modelo não se refere a um diagrama ou conjunto de diagramas. Os diagramas são úteis, mas eles não são o modelo, apenas diferentes visões do modelo. O modelo é o conjunto de conceitos selecionados para serem implementados em um software, representado no código e qualquer outro artefato de software utilizado para construir o sistema entregue. Em outras palavras, o código é o modelo. Editores de texto fornecem uma maneira de trabalhar com este modelo, embora modernas ferramentas forneçam a abundância de outras visualizações também (diagramas de classe UML e etc).
O DDD define quatro camadas principais, sendo elas:
- User Interface: Responsável por apresentar informações ao usuário e interpretar os comandos do usuário.
- Application: Esta camada coordena a atividade das aplicações. Ele não contém qualquer lógica de negócios. Não guarda o estado de objetos de negócios, mas ele pode armazenar o estado de um progresso das tarefas do aplicativo.
- Domain: Esta camada contém informações sobre o domínio do negócio. O estado de objetos de negócios é realizado aqui. Persistência dos objetos de negócios e, possivelmente, seu estado é delegado à camada de infra-estrutura.
- Infrastructure: Esta camada atua como uma biblioteca de suporte em todas as outras camadas. Fornece a comunicação entre as camadas, implementa persistência para objetos de negócios, contém bibliotecas de suporte para a camada de interface do usuário e etc.
Conclusão
O DDD não é a solução para todos os problemas de todas as camadas de um sistema. Seu foco é na modelagem das entidades principais de negócio usando a linguagem adequada daquele domínio para facilitar a manutenção, extensão e entendimento.