Top Banner
Aggregates, desafio tático na utilização de Domain Driven Design Thiago Almeida de Souza Weber - Eduardo Filipe Gomes
43

Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture

Jun 26, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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

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

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

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

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

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
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

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

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

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

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

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

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

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

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

<<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

<<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
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

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

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

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

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

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

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

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

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

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

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

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://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

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

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://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

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

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://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

CONSTRAINTS BUSINESS RULES

Page 37: Domain Driven Design Aggregates, desafio tático na ... · Effective Aggregate Design - Vaughn Vernon Tackling Complexity DDD - Vladik Khononov Uniqueness Validation in CQRS Architecture

https://giphy.com/gifs/asdf-movie-9ajz3tCNQCCLm

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

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

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

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

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

Sugestão de treinamento:

udemy.com/fundamentos-de-domain-driven-design

Cupom: TDC2019