Slide 1

Slide 1 text

Então você quer ser um praticante de DDD @talyssonoc

Slide 2

Slide 2 text

Talysson Oliveira Software architect & Chief Learning Officer na Codeminer42 @talyssonoc beacons.ai/talyssonoc

Slide 3

Slide 3 text

codeminer42.com @codeminer42

Slide 4

Slide 4 text

Existem muitos equívocos em torno de Domain-Driven Design

Slide 5

Slide 5 text

- DDD só adiciona complexidade desnecessária no código - DDD é 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 - …

Slide 6

Slide 6 text

Resumos, vídeos e "exemplos" que pulam as partes importantes 😱

Slide 7

Slide 7 text

Esqueça tudo que você já ouviu falar sobre DDD

Slide 8

Slide 8 text

Pare de achar que DDD é uma arquitetura de software

Slide 9

Slide 9 text

Inclusive pare de associar DDD a código por um instante

Slide 10

Slide 10 text

Para praticar DDD, você precisa saber do que ele se trata

Slide 11

Slide 11 text

"O coração de um software é sua habilidade de resolver problemas relacionados ao domínio para seus usuários" Domain-Driven Design - Eric Evans

Slide 12

Slide 12 text

Domínio - Finanças - Saúde - Educação - Comércio - 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

Slide 13

Slide 13 text

Automóveis (Domínio) Automodelo

Slide 14

Slide 14 text

Como é cultivado o modelo?

Slide 15

Slide 15 text

Especialistas de domínio Especialistas de desenvolvimento

Slide 16

Slide 16 text

Especialistas de domínio Especialistas de desenvolvimento Modelo

Slide 17

Slide 17 text

Especialistas de domínio Especialistas de desenvolvimento Modelo Linguagem ubíqua

Slide 18

Slide 18 text

DDD é uma abordagem de desenvolvimento onde: - Focamos no domínio - Exploramos modelos colaborativamente entre especialistas de domínio e de desenvolvimento - Falamos uma linguagem ubíqua

Slide 19

Slide 19 text

O modelo e a linguagem ubíqua são universais? Não (pelo menos na maior parte dos casos)

Slide 20

Slide 20 text

Carro

Slide 21

Slide 21 text

Produto

Slide 22

Slide 22 text

Um modelo e sua linguagem ubíqua são limitados à um contexto

Slide 23

Slide 23 text

Projetos tendem a ter múltiplos modelos em atividade ao mesmo tempo

Slide 24

Slide 24 text

Projetos tendem a ter múltiplos contextos em atividade ao mesmo tempo

Slide 25

Slide 25 text

Contexto limitado (bounded context) Uma divisão onde um modelo e uma linguagem ubíqua se aplicam

Slide 26

Slide 26 text

Mantendo a integridade do modelo

Slide 27

Slide 27 text

Integração contínua (continuous integration) - Mesmo em contextos bem definidos, 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!

Slide 28

Slide 28 text

Utilize o processo de Integração Contínua como indicador de fragmentação e quebra de integridade do modelo

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Mapeamento de contextos (context mapping) - Definição dos pontos de 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

Slide 32

Slide 32 text

Supplier Customer Depende Reconhece e coopera Upstream Downstream Published language Anticorruption layer

Slide 33

Slide 33 text

Upstream e downstream - Relação entre dois contextos onde: - 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

Slide 34

Slide 34 text

Linguagem publicada (published language) - A forma com que um 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

Slide 35

Slide 35 text

Camada anticorrupção (anticorruption layer) - Interface através da qual será 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

Slide 36

Slide 36 text

Supplier Customer Depende Reconhece e coopera Upstream Downstream Published language Anticorruption layer

Slide 37

Slide 37 text

Upstream Conformist Não coopera Published language Se conforma Downstream Depende

Slide 38

Slide 38 text

Open Host Service Customer Customer Depende Depende Upstream Downstream Downstream Published language Anticorruption layer Anticorruption layer

Slide 39

Slide 39 text

Partner Partner Coopera e depende Coopera e depende Upstream & Downstream Upstream & Downstream Published language Published language Anticorruption layer Anticorruption layer

Slide 40

Slide 40 text

Shared kernel

Slide 41

Slide 41 text

Separate ways

Slide 42

Slide 42 text

Porém, nem tudo são flores…

Slide 43

Slide 43 text

Big ball of mud

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

Design estratégico

Slide 46

Slide 46 text

Fonte:

Slide 47

Slide 47 text

Obrigado! @talyssonoc beacons.ai/talyssonoc