36
Como DDD e principalmente Domain Model contribuem na construção de microservices. Isaac Felisberto de Souza Engenheiro de Software

Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Como DDD e principalmente Domain Model

contribuem na construção de microservices.

Isaac Felisberto de SouzaEngenheiro de Software

Page 2: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

JOGO RÁPIDO!

RESPONDA APENAS

SE FOR

SIM

➔ Quem conhece DDD?

➔ Quem utiliza microservices?

➔ Quem aplica DDD em microservices?

Page 3: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

ROTEIRO DE HOJE!

1 VISÃO GERAL SOBRE DDD.

2 FALHAS COMUNS NO USO DE DDD.

3 APLICANDO DDD EM MICROSERVICES!

Page 4: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

VISÃO GERAL SOBRE DDD

Page 5: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

➔ Eric Evans ➔ Publicado em 2004.➔ Possui 450+ páginas.

Page 6: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Organização por Camadas

➔ User Interface: Apresentar e interpretar comandos do usuário ou outro sistema.

➔ Application: Funções que são executadas pelo Software.

➔ Domain: Regras de negócio.

➔ Infrastructure: Recursos técnicos genéricos

Page 7: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language

Bounded Context

Polissemia Designed by pch.vector / Freepik

Page 8: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language

Bounded Context

Polissemia

➔ Qual o domínio do negócio?

➔ Quais contextos e entidades?

Eric Evans diz que:

“O coração do software está na sua capacidade de resolver problemas relacionados ao domínio…”

“... É preciso afiar sua capacidade de modelagem e dominar o design de domínios.”

(entidades não são as tabelas de um banco de dados)

Page 9: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language

Bounded Context

Polissemia

Quem?

➔ Profissionais na gestão e negócio.

➔ Designers.

➔ Desenvolvedores(as).

➔ Times de Operação.

➔ Time de Suporte.

O uso de uma linguagem universal.

Page 10: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language

Bounded Context

Polissemiamartinfowler.com

Page 11: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language

Bounded Context

Polissemia

A porta do banco travou.

Qual o significado da palavra Banco?

Chegando na praça, sente no banco e aguarde

Estou esperando em frente ao banco da praça.

Agência ou Instituição Bancária

Page 12: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language+

Bounded Context+

Polissemia

Page 13: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

FALHAS COMUNS NO USO DE DDD

Page 14: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

EM MONÓLITOS

Page 15: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Normalmente focam apenas nas camadas!

➔ Regra de negócio não está apenas em Domain.

➔ Domain não organizados por contextos.

➔ Pouca clareza sobre conceitos do domínio.

➔ Múltiplos termos/palavras para coisas iguais.

Page 16: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

EM MICROSERVICES

Page 17: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Microservices abandonam a

organização de camadas.

➔ Não há visão de contextos.

➔ Cada microservice utiliza suas nomenclaturas.

➔ Não há clareza sobre dependências.

➔ Frontend acessa direto todos microservices.

➔ Inconsistências nos Contratos de API’s.

Page 18: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

APLICANDO DDD EM MICROSERVICES

Page 19: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language

Bounded Context

Polissemia

“O coração do software…”

A solução deve possuir um modelo de domínio!

Uma solução fictícia, chamada Guia Hóspede,o domínio é: RESERVA DE HOTÉIS.

Page 20: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Modelo de domínio do Guia Hóspede

Page 21: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

QUAL O TAMANHO

DE UM MICROSERVICE?➔ As entidades determinam os contratos das API’s.

➔ O modelo indica as dependências.

➔ Contextos indicam a fragmentação inicial de microservices.

Page 22: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

➔ Entidades fracas não precisam ser isoladas em um microservice.

⚠ Cuidado com excesso de fragmentação. ⚠➔ Um microservice para esse contexto é aceitável.

Page 23: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

➔ Hotel é a entidade forte, terá um microservice.

➔ Acomodação também é uma entidade forte.

Acomodação...

➔ Inicia no microservice de hotéis.

➔ Quando precisar de escala, será segregada.

Page 24: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

➔ Hóspede parece uma entidade forte, mas...

➔ O contexto foca na estadia, um microservice para o contexto é aceitável.

Page 25: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

➔ Mais importante que o tamanho do microservice, é o contexto.

➔ As dependências entre microservices seguem o modelo de domínio.

➔ O modelo ajuda a compreender possíveis evoluções.

➔ Os microservices explicitam melhor o domínio de negócio.

hoteis-service stays-service

accounts-service

accommodations-service

Page 26: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language

Bounded Context

Polissemia

Todos utilizam uma linguagem universal!

O nome de contextos, entidades e atributos é utilizada em:

➔ Nome dos microservices e Contrato das API’s.

➔ Modelagem da persistência de dados.

➔ Artefatos distribuídos.

➔ Endereço dos Endpoints.

➔ Mapeamentos de monitoramento.

➔ No diálogo entre integrantes do projeto/empresa.

Page 27: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language

Bounded Context

Polissemia

Microservices respeitam os limites de cada contexto!

➔ Informação adequada ao o contexto.

➔ Dependência fraca entre entidades.

➔ Conta é uma entidade genérica. (Hotéis e usuários).

➔ Dados específicos para conta de hotéis no contexto de hotéis.

➔ A chave entre entidades é um UUID, ou “strings humanizadas”.

Page 28: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model

Ubiquitous Language

Bounded Context

Polissemia

Nomenclaturas não geram dúvidas!

➔ Conta, é a representação genérica.

➔ Conta de Parceiros, dados adicionais de contas de hotéis.

➔ Reserva, é Reserva de Estadias.

Page 29: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

CAMADAS DO DDD

NO CONJUNTO DE

MICROSERVICES

Page 30: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

➔ Adoção de API Gateway.

➔ Frontend ou sistemas externos acessam o API Gateway.

➔ API’s mapeadas no gateway respeitam o modelo de domínio.

➔ O API Gateway -> Application LayerRepresentação da

Application Layer

Page 31: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

➔ Agrupados por domínio/contexto.

➔ Uso de um Core Domain.

Os microservices

representam a

Domain Layer

Page 32: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Arquitetura Orientada a Eventos

possibilita uso deDOMAIN EVENTS

➔ Schemas seguem o modelo de domínio.

➔ Nomenclatura de filas seguem as entidades.

➔ Agrupamentos lógicos seguem os contextos.

Page 33: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver
Page 34: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Domain Model Ubiquitous LanguageBounded ContextPolissemia

Organizados com:ApplicationDomains

Page 35: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

MICROSERVICES ORGANIZADOS,COM MENOR ACOPLAMENTO, MAIOR COESÃO

E FOCADOS NO NEGÓCIO.

OBRIGADO!

Page 36: Como DDD e principalmente Domain Model...2021/03/24  · 筐撚uais contextos e entidades? Eric Evans diz que: 窶廾 coraテァテ」o do software estテ。 na sua capacidade de resolver

Isaac Felisberto de SouzaEngenheiro de Software

[email protected]

linkedin.com/in/isaacfsouza

Um guia para auxiliar oDesenvolvimento de Software.

Através de conteúdo para desenvolvedores(as).

www.guia.dev

Guia Dev (linkedin.com/company/guiadev)

@guia_dev

Siga! e compartilhe ;-)