Domain Driven Design, ou seja, Desenvolvimento Orientado a Domínio.
O objetivo é focar no domínio da solução, através de um contexto apresentado, determinar a solução de maneira que atenda:
- Alinhar o código com as regras de negócio – para atender, pode-se utilizar XP, aproximando a equipe de negócio a equipe de desenvolvimento
- Minimizar acoplamento – fazer com que as partes do sistema interaja entre si, evitando dependência entre os módulos
- Favorecer o reuso – módulos do sistema, podem ser reutilizados em outras funções
- Independência de tecnologia – focar na regra de negócio e código
O modelo de software típico de DDD consiste:
- Interface com Usuário – responsável por interagir com o usuário, capturando intenções e informações
- Aplicação – camada intermediária entre a camada 1 e 3, atuando como comunicação de dados
- Domínio – camada com as regras de negócio. Toda a inteligência do sistema está aqui.
- Infra-estrutura – camada responsável pelos recursos técnicos, geralmente são classes que se comunicam com Banco de Dados e mensagens
Exemplos:
https://github.com/paoesco/cargotracker-ddd
https://github.com/citerus/dddsample-core
https://github.com/olivergierke/spring-restbucks
http://www.the-coder-life.com/2016/02/domain-driven-design-hands-on-example.html
https://github.com/simbo1905/root-objects
Links:
http://www.agileandart.com/2010/07/16/ddd-introducao-a-domain-driven-design/