9. Você já:
• Olhou para um código e não entendeu
o que ele fazia?
• Programou alguma funcionalidade e
não entendeu o que estava fazendo?
Saturday, September 6, 14
11. Premissas
• “For most software projects, the
primary focus should be on the
domain and domain logic.”
• “Complex domain designs should be
based on a model.”
Saturday, September 6, 14
12. “Domain driven design is not a technology or a
methodology. Its a way of thinking and a set of
priorities, aimed an accelerating software projects
that have to deal with complicated domains.”
Saturday, September 6, 14
19. Ruído sintático
• Causado pela diferença de
representações
• Código != Linguagem escrita / falada
Saturday, September 6, 14
20. Ruído Semântico
• Diferença entre como o usuário pensa
em um conceito e como ele é
implementado
• Erros de comunicação e entendimento
• Necessita de constante tradução
Saturday, September 6, 14
24. Como se livrar do
rúido e melhorar a
comunicação ?
Saturday, September 6, 14
25. Linguagem ubíqua
• Linguagem única de comunicação
• Baseada no domínio (negócio)
• Está em toda a parte
• Pode ser uma versão simplificada do
domínio real
Saturday, September 6, 14
27. Posso usar DDD no meu
sistema?
• Pré-requisitos
• Acesso aos especialistas de domínio
• Processo Iterativo
• Contexto definido
• Habilidade do time
Saturday, September 6, 14
31. Patterns
• Entity
• Value Object
• Aggregates
• Service
• Repository
• Domain Event (Bonus Track)
Saturday, September 6, 14
32. Entity
• Idéia de identidade
• Mutável
• Id não necessariamente o do banco
Saturday, September 6, 14
33. Value Object
• Não tem identidade
• O importante é o valor que carregam
• Imutável
Saturday, September 6, 14
34. Aggregates
• Associações entre Entities ou Value
Objects
• Tem um objeto principal (root/raiz)
• Tratado como uma coisa só
• Sistema só deve manter referências
para a raiz do aggregate
Saturday, September 6, 14
36. Services
• Ações que não pertencem a nenhum
objeto do domínio
• Faze parte do domínio
• Stateless
• Deveriam existir poucos...
Saturday, September 6, 14
37. Repository
• Abstrai do domínio o acesso a dados
• Coleções de objetos, mas com
capacidade de queries avançadas
• Não necessariamente um por Entity
Saturday, September 6, 14
38. Domain Events
• Capturar coisas que podem disparar
uma mudança no estado do domínio
• Ótimo para integrar domínios
diferentes
Saturday, September 6, 14
46. Bounded Context
• Fronteira bem definida entre os
diversos domínios dentro do sistema
• Delimita a aplicabilidade de um certo
modelo.
Saturday, September 6, 14
49. Vários tipos de contextos
• Generic Subdomains
• Supporting Subdomain
• Core domain
Saturday, September 6, 14
50. Generic Context
• Existe no seu sistema, e em muitos
outros.
• Não é o foco, mas você precisa fazer.
• Ex: Contabilidade
• Pode ser comprado ou terceirizado
completamente
Saturday, September 6, 14
51. Supporting Context
• Específico seu
• Não é a funcionalidade principal do
seu software
Saturday, September 6, 14
52. Core domain
• Resolve o problema principal da
empresa
• É por essa parte que as pessoas usam
seu produto
• é suportado pelos outros contextos
• é a menor parte do sistema
(geralmente)
Saturday, September 6, 14
65. Alguns patterns para
integração
• Open Host Services
• Published Language
• Anti Corruption Layer
Saturday, September 6, 14
66. Open Host Service
• O outro contexto é acessado por meio
de um serviço
• Pode ser um serviço dentro do seu
domínio, desde que isole o contexto
Saturday, September 6, 14
67. Published Languages
• Modelo “público” daquele subdomínio
• Parecido com modelo canônico (SOA)
• Pode ser um subconjunto da
linguagem daquele subdomínio
Saturday, September 6, 14
68. Anti Corruption Layer
• Camada de conversão
• Evita que termos estranhos entrem no
domínio
• Geralmente na ponta “D” da
integração
• Não é parte do domínio
x
Saturday, September 6, 14
69. V - DDD in Legacy
Systems
Saturday, September 6, 14
71. Bubble Context
• Não precisa de “muito DDD”
• Alguns dados do legado
• Isole o legado em uma bolha
• Consulte o que precisar e modifique
para seu domínio (ACL)
Saturday, September 6, 14
74. Autonomous Bubble
• Mais DDD
• Isole seu sistema do legado e faça a
comunicação assíncrona
• Pode ser uma evolução da bolha
• Novo contexto autônomo (novo
sistema?)
Saturday, September 6, 14
77. LAAS - legacy as a
service
• Pouco DDD
• Só algumas funcionalidades do legado
• Pouco acoplamento com o legado
Saturday, September 6, 14
78. Domain Event Channel
• Mais DDD
• Desenvolvimento independente entre
os contextos
• Comunicação entre os contextos é
feito por eventos em um canal global
Saturday, September 6, 14