domain driven design aggregates, desafio tático na ... · effective aggregate design - vaughn...
TRANSCRIPT
![Page 1: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/1.jpg)
Aggregates, desafio tático na utilização de Domain Driven Design
Thiago Almeida de Souza Weber - Eduardo Filipe Gomes
![Page 2: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/2.jpg)
Quem somos!
Thiago Almeida de Souza Weber
Arquiteto de Software no segmento de Supply Chain na TOTVS.
Eduardo Filipe Gomes
Arquiteto de Software no segmento de Supply Chain - Logística na
TOTVS.
![Page 3: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/3.jpg)
Linguagem ubíqua é a essência...
Não o modelo arquitetural...
![Page 4: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/4.jpg)
Suas premissas!● Foco principal do projeto no domínio principal e na lógica
do domínio.
● Basear projetos complexos em um modelo.
● Colaboração criativa entre especialistas técnicos e de domínio.
![Page 5: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/5.jpg)
Estratégico vs Tático
GENERIC DOMAINTercerize!Compre!
SUPPORTING DOMAINActive recordTransaction script
CORE DOMAINDomain modelEvent sourcing
![Page 6: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/6.jpg)
![Page 7: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/7.jpg)
Estratégico vs Tático
GENERIC DOMAINTercerize!Compre!
SUPPORTING DOMAINActive recordTransaction script
CORE DOMAINDomain modelEvent sourcing
![Page 8: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/8.jpg)
DefiniçãoAgrupamento de Entidades e Objetos de Valor dentro de um limite de consistência.
Agregados
Objetivo -> Integridade!
![Page 9: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/9.jpg)
Como identificar?Como identificar os objetos de um agregado?
● Objeto de Valor● Entidades● Entidades que fazem parte do agregado● Entidade Raiz
![Page 10: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/10.jpg)
Estrutura de agregadosEntidade Raiz
Entidade Agregada
Entidade Agregada
Objeto de Valor
Objeto de Valor
Objeto de Valor
![Page 11: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/11.jpg)
11
Tamanho importa!
Quanto menor,melhor!
![Page 12: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/12.jpg)
Como modelar?● Barreira de consistência transacional.
● Um agregado por transação.
● SRP - Single Responsibility Principle
● Referência a outros agregados através de ID.
![Page 13: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/13.jpg)
Data [ ]
Fornecedor [ ]
Pedido de Compra
Total [ ]
Item | NCM | Qtd | Valor[ ] [ ] [ ] [ ][ ] [ ] [ ] [ ][ ] [ ] [ ] [ ]
![Page 14: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/14.jpg)
Data [ ]
Fornecedor [ ]
Pedido de Compra
Total [ ]
Item | Qtd | Valor[ ] [ ] [ ][ ] [ ] [ ][ ] [ ] [ ]
![Page 15: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/15.jpg)
<<raiz do agregado>>
Produto
<<raiz do agregado>>
PedidoCompra
<<entidade>>
Item
1..*
Dentro
Fora
![Page 16: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/16.jpg)
<<objeto de valor>>
ProdutoId
<<raiz do agregado>>
PedidoCompra
<<entidade>>
Item
1..*
![Page 17: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/17.jpg)
![Page 18: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/18.jpg)
Pré requisitos !● Deve utilizar arquitetura em camadas.
● Deve utilizar D.D.D.
● Deve ser SaaS.
● Pode optar por utilizar CQRS.
![Page 19: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/19.jpg)
A aplicação !● Um roteiro de itens a serem avaliados numa inspeção.
● Os itens que não estiverem de acordo devem ser
registrados como não conformes.
● Os itens não conformes precisam ser avaliadas e podem
gerar uma ordem de manutenção no ERP.
![Page 20: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/20.jpg)
I HAVE NO IDEA...
WHAT I'M DOING...
![Page 21: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/21.jpg)
O nome do roteiro de inspeção não pode se repetir...
![Page 22: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/22.jpg)
CONSTRAINTS BUSINESS RULES
![Page 23: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/23.jpg)
Database?
Aggregate?
Repository?
Application?
Domain service?
![Page 24: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/24.jpg)
Como utilizar corretamente os repositórios...
![Page 25: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/25.jpg)
A repository lifts a huge burden from the client, which can now talk
to a simple, intention revealing interface, and ask for what it needs
in terms of the model.
- Eric Evans
“
![Page 26: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/26.jpg)
To support all this requires a lot of complex technical infrastructure,
but the interface is simple and conceptually connected to the
domain model.
- Eric Evans
“
![Page 27: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/27.jpg)
DOMAIN INFRA
https://giphy.com/gifs/violence-bomb-e2gVVjM3amp6o
![Page 28: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/28.jpg)
POR IDENTIFICADOR
Evite consultas que não sejam baseadas em identificadores.
VERIFICAÇÃO DE UNICIDADE
Apenas para verificar se um condição é atendida.
SEMPRE RETORNE O AGREGADO TODO
Para operação todas as operações.
ATRIBUTOS VIRTUAIS
Quando um atributo do agregado é resultado de uma computação pesada para realizar ‘in-memory’..
![Page 29: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/29.jpg)
https://bit.ly/2UYSWsZ
![Page 30: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/30.jpg)
De / Para !● DTO > Domain Model
● Domain Model > Anemic Model (Repository)
● Anemic Model (Repository) > Domain Model
● Anemic Model (Repository) > DTO
![Page 31: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/31.jpg)
X 4
![Page 32: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/32.jpg)
https://bit.ly/2UIKnx8
![Page 33: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/33.jpg)
De / Para !● DTO > Domain Model
● Domain Model > Anemic Model (Repository)
● Anemic Model (Repository) > Domain Model
● Anemic Model (Repository) > DTO
![Page 34: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/34.jpg)
Os entrypoints precisam ser versionados...
![Page 35: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/35.jpg)
https://giphy.com/gifs/boards-lego-wiki-YKcmvt06IvNny
![Page 36: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/36.jpg)
CONSTRAINTS BUSINESS RULES
![Page 38: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/38.jpg)
RE
ST
DATABASE
MQ BROKERAPLICAÇÃO
DOMÍNIO
Até qual camada?
COMANDO EVENTO
![Page 39: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/39.jpg)
Local: Camada de entrada de dados.
Exemplo: O campo nome deve ter entre 1 e 50 caracteres.
RESTRIÇÕES DE ENTRADA
Local: Dominio (ValueObject).
Exemplo: A placa do veículo possui 7 caracteres.
CONSTRAINTS
Local: Dominio (Agregado).
Exemplo: Não existe um roteiro sem um nome.
INVARIANTES
Local: Dominio.
Exemplo: O roteiro não pode ser publicado enquanto incompleto.
REGRAS DE NEGÓCIO
![Page 40: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/40.jpg)
Recap !● Modelagem estratégica (negócio) antes da tática (técnica).
● Utilize corretamente os repositórios.
● Evite complexidade técnica desnecessária.
● Escolha o veneno que faça sentido para o negócio.
![Page 41: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/41.jpg)
Leituras recomendadas: ● Effective Aggregate Design - Vaughn Vernon
● Tackling Complexity DDD - Vladik Khononov
● Uniqueness Validation in CQRS Architecture - Jeremie Chassaing
● How to Validate Commands in a CQRS Application - Daniel Whittaker
Domain-Driven Design Europe
![Page 42: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/42.jpg)
Sugestão de treinamento:
udemy.com/fundamentos-de-domain-driven-design
Cupom: TDC2019
![Page 43: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0e01db7e708231d43d28d0/html5/thumbnails/43.jpg)
Obrigado! Thiago Almeida de Souza Weber
thiagoasw
Eduardo Filipe Gomes
eduardofilipegomes