é um tipo de arquitetura de software - DDD é uma forma de organizar pastas e arquivos - Aplicações que aplicam DDD tem arquivos demais - Para usar DDD tem que usar um monte de design patterns - DDD torna o código difícil de entender - Nunca precisei usar DDD pro meu software funcionar - …
Aviação - Mineração - Transporte - … Problema Sistema de abstrações que descrevem aspectos específicos do domínio, usado para resolver problemas relacionados ao domínio Modelo
trabalhar em time incorre na tendência de fragmentação do modelo - Não temos ferramentas que nos permitam testar e garantir a corretude puramente do modelo - O processo de Integração Contínua é baseado na integração de conceitos no modelo, que eventualmente se torna concreta através do código - O código, como expressão e implementação do modelo, pode ser testado!
contato entre modelos, delimitando mecanismos de compartilhamento, isolamento e influência entre eles - Descoberta das relações entre os contextos que impõe restrições na natureza do modelo ou no ritmo viável para mudanças - Muitas vezes a natureza dessa relação pode ser inclusive não-técnica - Ex.: serviço terceirizado de processamento de pagamentos
As ações de contexto em upstream afetam o sucesso do contexto em downstream - Mas o contexto em downstream não afeta significativamente aquele em upstream - Exemplo: - Duas cidades na descida de um rio - A poluição da cidade mais acima (upstream) afeta a cidade mais abaixo (downstream) - A poluição da cidade mais abaixo tem pouco ou nenhum efeito na cidade acima
contexto define como a comunicação com ele é feita - Uma linguagem compartilhada entre o modelo e seu(s) cliente(s) - Frequentemente expressada através de padrões de troca de dados: - JSON + REST (+ Swagger) - JSON + GraphQL - Protobuf + gRPC - AMQP + eventos documentados - XML + SOAP
feita a tradução entre os modelos de dois contextos que se comunicam - Protege o contexto em downstream de não ser corrompido pelo upstream - Esta camada conhece a Linguagem Publicada do contexto em upstream - A tradução é feita tanto para entrada quanto saída de dados - Exemplos: - Classes de mapeamento/adapters - Wrappers em volta de SDKs, clients de APIs e consumers de eventos