SlideShare uma empresa Scribd logo
A importância de DDD
e o Domain Model
na construção de APIs!
Isaac Felisberto de Souza
Engenheiro de Software
JOGO RÁPIDO!
RESPONDA APENAS
SE FOR
SIM
➔ Quem trabalha no dia a dia com APIs?
➔ Quem conhece DDD?
➔ Quem aplica DDD na construção de APIs?
ROTEIRO
DE HOJE!
1 PRÁTICAS COMUNS EM APIs.
2 VISÃO RÁPIDA SOBRE DDD.
3
APLICANDO DDD
NA CONSTRUÇÃO DE APIs!
PRÁTICAS COMUNS EM APIs.
1
O que é uma
API (Application Programming Interface) ?
É uma interface de acesso às funções que
um software disponibiliza.
Uma API não é apenas HTTP/REST/JSON!
➔ WebService SOAP/XML, é API.
➔ Uma biblioteca JavaScript, é API.
➔ Classes abstratas ou interfaces no Java, são APIs.
➔ ...
O que uma API não
deve ser!?!?
Ela não deve ser
a implementação que contém
regras de negócio.
Uma API deve prover o
acesso às regras de
negócio!
E... para a sequência
deste papo, usaremos
API Rest como base
APIs que
apenas expõe
a modelagem do
banco de dados.
APIs modeladas
de acordo com a
UI da solução.
Retornando
às práticas comuns, temos:
APIs que
apenas expõe
a modelagem do
banco de dados.
É comum… :
➔ Paths que representam diretamente o modelo do
banco de dados, sejam tabelas, coleções, etc.
➔ Classes de ORM usadas também como
mapeamento para composição das APIs.
➔ Colunas “internas” do banco expostas nas APIs.
O que fazer quando?...
➔ Há uma mudança no banco de dados.
➔ Algumas colunas não devem ser expostas.
➔ Decide-se mudar a forma de persistência.
APIs modeladas
de acordo com a
UI da solução
É comum… :
➔ Paths que representam a navegação de
menus/telas.
➔ Composição de atributos fortemente amarrados aos
campos e usabilidade das telas.
O que fazer quando?...
➔ A usabilidade das telas mudar.
➔ Haver versões com usabilidade diferente.
➔ Haver dispositivos com UI diferente.
➔ Um sistema terceiro precisar se integrar a API.
VISÃO RÁPIDA SOBRE DDD
2
➔ Eric Evans
➔ Publicado em 2004.
➔ Possui 450+ páginas.
Design
Tático
Design
Estratégico
Modelagem
de domínio
do negócio
Padrões
de arquitetura
e de projeto
Tático:
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
Designed by pch.vector / Freepik
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
… no Estratégico:
➔ 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)
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
Quem?
➔ Profissionais na gestão e negócio.
➔ Designers.
➔ Desenvolvedores(as).
➔ Times de Operação.
➔ Times de Suporte.
O uso de uma linguagem universal.
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
martinfowler.com
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
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
Domain Model
Ubiquitous Language
+
Bounded Context
+
Polissemia
APLICANDO DDD
NA CONSTRUÇÃO DE APIs!
3
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
“O coração do software…”
A solução deve possuir um modelo de domínio!!!
Uma boa API,
passa por um entendimento claro
do domínio, seus contextos, entidades, etc!
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
Um modelo fictício de domínio de E-commerce!
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
Contextos!
Em uma API Rest, os
contextos se tornam os paths
de primeiro nível:
○ <host>/contas/...
○ <host>/estoque/...
○ <host>/vendas/...
○ <host>/entregas/...
○ <host>/cobranca/...
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
Características!
Entidades!
É a base para a composição dos contratos.
○ Entidades fortes, terão endpoints próprios.
○ Entidades fracas, podem ter endpoints ou estarem
encapsuladas junto a outras entidades.
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
Nomenclaturas!
A linguagem universal deve ser aplicada a tudo:
○ Paths/Endpoints.
○ Atributos.
○ Parâmetros na url.
○ etc...
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
Contratos respeitam os limites dos contextos!
○ Cada endpoints, possui Informação adequada
ao o contexto.
○ Chaves de associação entre entidades de
contextos diferentes são UUID, string
humanizadas, etc..
Domain Model
Ubiquitous
Language
Bounded
Context
Polissemia
Nomenclaturas não geram dúvidas!
○ Se um pedido tem endereço de entrega e de
cobrança, não pode haver apenas um atributo de
nome “endereço”.
○ Se o produto no contexto de vendas, é o que foi
vendido, pode-se chamá-lo de “produto vendido”.
DDD contribui
para uso da abordagem
de API First
Pense
no fluxo
Modelo do banco
de dados
API API First
UI Solução API API First
Domain
Model
API
UI Solução
Regras de
negócio
Modelo do
banco de
dados
Outros....
API First
DDD contribui
para construção de contratos
mais claro a todos
O que facilita inclusive o
processo de documentação
Uma API
representa a camada
Application
Na visão de camadas
propostas por DDD
Em um monólito, ou um
serviço específico,
Controllers, Serializers,
dentre outros, fazem
parte dessa camada.
Na visão de camadas
propostas por DDD
Deve-se evitar expor
diretamente o modelo de
dados concreto.
Na visão de camadas
propostas por DDD
Já as regras de negócio
fazem parte de Domain.
Uma API determina como
será o acesso ao Domain!
Aplicando DDD, é possível
que APIs de características
diferentes usem o mesmo
Domain
Na visão de camadas
propostas por DDD Em um arquitetura de
microservices.
Um API Gateway,
pode fazer o papel da
camada Application
para endpoints/serviços.
DDD na construção de APIs, também ajuda em:
➔ Contratos que foquem no negócio.
➔ Isolar os detalhes de implementação.
➔ Refatorações com menor impacto para
quem utiliza a API.
➔ Documentações mais simples, com a
mesma linguagem a todos.
Use o Domain Model
para modelar suas APIs!
Construa sua API como uma
camada Application.
DDD contribui para APIs
mais maduras e sustentáveis!
Obrigado!
Isaac Felisberto de Souza
Engenheiro de Software
isaacsouza@gmail.com
linkedin.com/in/isaacfsouza
Um guia para auxiliar o
Desenvolvimento de Software.
Através de conteúdo para desenvolvedores(as).
www.guia.dev
Guia Dev (linkedin.com/company/guiadev)
@guia_dev
Siga! e compartilhe ;-)

Mais conteúdo relacionado

Mais procurados

De um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQLDe um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL
Taller Negócio Digitais
 
Micro Frontends: Rompiendo el monolito en las aplicaciones Web
Micro Frontends: Rompiendo el monolito en las aplicaciones WebMicro Frontends: Rompiendo el monolito en las aplicaciones Web
Micro Frontends: Rompiendo el monolito en las aplicaciones Web
Belatrix Software
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
UFPA
 
Web APIs e dados abertos - API de Compras Governamentais
Web APIs e dados abertos - API de Compras GovernamentaisWeb APIs e dados abertos - API de Compras Governamentais
Web APIs e dados abertos - API de Compras Governamentais
nitaibezerra
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Nader Albert
 
Domain-Driven Design in der Praxis
Domain-Driven Design in der PraxisDomain-Driven Design in der Praxis
Domain-Driven Design in der Praxis
Michael Mirold
 
Introduction to DDD
Introduction to DDDIntroduction to DDD
Introduction to DDD
Eduards Sizovs
 
Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven Design
Naeem Sarfraz
 
LIVRO PROPRIETÁRIO - MODELAGEM DE DADOS
LIVRO PROPRIETÁRIO - MODELAGEM DE DADOSLIVRO PROPRIETÁRIO - MODELAGEM DE DADOS
LIVRO PROPRIETÁRIO - MODELAGEM DE DADOS
Os Fantasmas !
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Young-Ho Cho
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
Sérgio Souza Costa
 
Aula03 Sistemas Distribuídos - Arquiteturas de sistemas distribuídos
Aula03 Sistemas Distribuídos - Arquiteturas de sistemas distribuídosAula03 Sistemas Distribuídos - Arquiteturas de sistemas distribuídos
Aula03 Sistemas Distribuídos - Arquiteturas de sistemas distribuídos
Messias Batista
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
Mustafa Dağdelen
 
Domain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroDomain Driven Design: Zero to Hero
Domain Driven Design: Zero to Hero
Fabrício Rissetto
 
AULA 01 - Conceitos de HTML.pptx
AULA 01 - Conceitos de HTML.pptxAULA 01 - Conceitos de HTML.pptx
AULA 01 - Conceitos de HTML.pptx
JEANCLEVERSONPRATAS
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Hannah Farrugia
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
Oğuzhan Soykan
 
Domain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureDomain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal Architecture
Crishantha Nanayakkara
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Gustavo Coutinho
 
Segurança da Informação - Ataques de Rede
Segurança da Informação - Ataques de RedeSegurança da Informação - Ataques de Rede
Segurança da Informação - Ataques de Rede
Natanael Simões
 

Mais procurados (20)

De um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQLDe um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL
 
Micro Frontends: Rompiendo el monolito en las aplicaciones Web
Micro Frontends: Rompiendo el monolito en las aplicaciones WebMicro Frontends: Rompiendo el monolito en las aplicaciones Web
Micro Frontends: Rompiendo el monolito en las aplicaciones Web
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
Web APIs e dados abertos - API de Compras Governamentais
Web APIs e dados abertos - API de Compras GovernamentaisWeb APIs e dados abertos - API de Compras Governamentais
Web APIs e dados abertos - API de Compras Governamentais
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain-Driven Design in der Praxis
Domain-Driven Design in der PraxisDomain-Driven Design in der Praxis
Domain-Driven Design in der Praxis
 
Introduction to DDD
Introduction to DDDIntroduction to DDD
Introduction to DDD
 
Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven Design
 
LIVRO PROPRIETÁRIO - MODELAGEM DE DADOS
LIVRO PROPRIETÁRIO - MODELAGEM DE DADOSLIVRO PROPRIETÁRIO - MODELAGEM DE DADOS
LIVRO PROPRIETÁRIO - MODELAGEM DE DADOS
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Aula03 Sistemas Distribuídos - Arquiteturas de sistemas distribuídos
Aula03 Sistemas Distribuídos - Arquiteturas de sistemas distribuídosAula03 Sistemas Distribuídos - Arquiteturas de sistemas distribuídos
Aula03 Sistemas Distribuídos - Arquiteturas de sistemas distribuídos
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Domain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroDomain Driven Design: Zero to Hero
Domain Driven Design: Zero to Hero
 
AULA 01 - Conceitos de HTML.pptx
AULA 01 - Conceitos de HTML.pptxAULA 01 - Conceitos de HTML.pptx
AULA 01 - Conceitos de HTML.pptx
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
 
Domain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureDomain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal Architecture
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
Segurança da Informação - Ataques de Rede
Segurança da Informação - Ataques de RedeSegurança da Informação - Ataques de Rede
Segurança da Informação - Ataques de Rede
 

Semelhante a A importância de DDD e o Domain Model na construção de APIs!

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Daniel Everling
 
DDD
DDDDDD
Como DDD e principalmente Domain Model contribuem na construção de microservi...
Como DDD e principalmente Domain Model contribuem na construção de microservi...Como DDD e principalmente Domain Model contribuem na construção de microservi...
Como DDD e principalmente Domain Model contribuem na construção de microservi...
Isaac de Souza
 
PHP nas Nuvens
PHP nas NuvensPHP nas Nuvens
PHP nas Nuvens
Marcos Bezerra
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
André Borgonovo
 
API management: um aliado para construção de APIs
API management: um aliado para construção de APIsAPI management: um aliado para construção de APIs
API management: um aliado para construção de APIs
Rafael de Paula Souza
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
Ralph Rassweiler
 
Corbawebserves
CorbawebservesCorbawebserves
Corbawebserves
Portal_do_Estudante_SD
 
Domain driven design - Visão Geral
Domain driven design - Visão GeralDomain driven design - Visão Geral
Domain driven design - Visão Geral
Lorival Smolski Chapuis
 
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Luciano Condé
 
APIs Atributos e Tecnologia
APIs Atributos e TecnologiaAPIs Atributos e Tecnologia
APIs Atributos e Tecnologia
Fábio Rosato
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013
André Borgonovo
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
Rodrigo Branas
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
Luís Cobucci
 
Uma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignUma introdução ao Domain Driven Design
Uma introdução ao Domain Driven Design
Lambda3
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutória
armeniocardoso
 
Computação em nuvem e Windows Azure
Computação em nuvem e Windows AzureComputação em nuvem e Windows Azure
Computação em nuvem e Windows Azure
Ricardo Guerra Freitas
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
Mario Guedes
 
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Flávio Lisboa
 
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
DNAD
 

Semelhante a A importância de DDD e o Domain Model na construção de APIs! (20)

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
DDD
DDDDDD
DDD
 
Como DDD e principalmente Domain Model contribuem na construção de microservi...
Como DDD e principalmente Domain Model contribuem na construção de microservi...Como DDD e principalmente Domain Model contribuem na construção de microservi...
Como DDD e principalmente Domain Model contribuem na construção de microservi...
 
PHP nas Nuvens
PHP nas NuvensPHP nas Nuvens
PHP nas Nuvens
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
API management: um aliado para construção de APIs
API management: um aliado para construção de APIsAPI management: um aliado para construção de APIs
API management: um aliado para construção de APIs
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Corbawebserves
CorbawebservesCorbawebserves
Corbawebserves
 
Domain driven design - Visão Geral
Domain driven design - Visão GeralDomain driven design - Visão Geral
Domain driven design - Visão Geral
 
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
 
APIs Atributos e Tecnologia
APIs Atributos e TecnologiaAPIs Atributos e Tecnologia
APIs Atributos e Tecnologia
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
Uma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignUma introdução ao Domain Driven Design
Uma introdução ao Domain Driven Design
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutória
 
Computação em nuvem e Windows Azure
Computação em nuvem e Windows AzureComputação em nuvem e Windows Azure
Computação em nuvem e Windows Azure
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
 
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
05 - Waldemir Cambiucci - Matriz de habilidades de um arquiteto TI
 

Mais de Isaac de Souza

Sua solução escala? Testes de Stress e APMs podem responder.
Sua solução escala? Testes de Stress e APMs podem responder.Sua solução escala? Testes de Stress e APMs podem responder.
Sua solução escala? Testes de Stress e APMs podem responder.
Isaac de Souza
 
Seu código fonte é sustentável?
Seu código fonte é sustentável?Seu código fonte é sustentável?
Seu código fonte é sustentável?
Isaac de Souza
 
Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.
Isaac de Souza
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
Isaac de Souza
 
Compondo uma plataforma de software
Compondo uma plataforma de softwareCompondo uma plataforma de software
Compondo uma plataforma de software
Isaac de Souza
 
Desenhando a arquitetura do software!
Desenhando a arquitetura do software!Desenhando a arquitetura do software!
Desenhando a arquitetura do software!
Isaac de Souza
 
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
Isaac de Souza
 
A multiplicação dos devs!
A multiplicação dos devs!A multiplicação dos devs!
A multiplicação dos devs!
Isaac de Souza
 
Estamos trabalhando melhor com dependências e ambientes usando containers?
Estamos trabalhando melhor  com dependências e ambientes  usando containers?Estamos trabalhando melhor  com dependências e ambientes  usando containers?
Estamos trabalhando melhor com dependências e ambientes usando containers?
Isaac de Souza
 
É hora de pensar em soluções portáveis na cloud!
É hora de pensar em soluções portáveis na cloud!É hora de pensar em soluções portáveis na cloud!
É hora de pensar em soluções portáveis na cloud!
Isaac de Souza
 
Cloud computing, quais vantagens reais?
Cloud computing, quais vantagens reais?Cloud computing, quais vantagens reais?
Cloud computing, quais vantagens reais?
Isaac de Souza
 
Maior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em railsMaior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em rails
Isaac de Souza
 

Mais de Isaac de Souza (12)

Sua solução escala? Testes de Stress e APMs podem responder.
Sua solução escala? Testes de Stress e APMs podem responder.Sua solução escala? Testes de Stress e APMs podem responder.
Sua solução escala? Testes de Stress e APMs podem responder.
 
Seu código fonte é sustentável?
Seu código fonte é sustentável?Seu código fonte é sustentável?
Seu código fonte é sustentável?
 
Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
Compondo uma plataforma de software
Compondo uma plataforma de softwareCompondo uma plataforma de software
Compondo uma plataforma de software
 
Desenhando a arquitetura do software!
Desenhando a arquitetura do software!Desenhando a arquitetura do software!
Desenhando a arquitetura do software!
 
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
Microservices em Python. Como estamos construindo a maior plataforma Agro do ...
 
A multiplicação dos devs!
A multiplicação dos devs!A multiplicação dos devs!
A multiplicação dos devs!
 
Estamos trabalhando melhor com dependências e ambientes usando containers?
Estamos trabalhando melhor  com dependências e ambientes  usando containers?Estamos trabalhando melhor  com dependências e ambientes  usando containers?
Estamos trabalhando melhor com dependências e ambientes usando containers?
 
É hora de pensar em soluções portáveis na cloud!
É hora de pensar em soluções portáveis na cloud!É hora de pensar em soluções portáveis na cloud!
É hora de pensar em soluções portáveis na cloud!
 
Cloud computing, quais vantagens reais?
Cloud computing, quais vantagens reais?Cloud computing, quais vantagens reais?
Cloud computing, quais vantagens reais?
 
Maior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em railsMaior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em rails
 

A importância de DDD e o Domain Model na construção de APIs!

  • 1. A importância de DDD e o Domain Model na construção de APIs! Isaac Felisberto de Souza Engenheiro de Software
  • 2. JOGO RÁPIDO! RESPONDA APENAS SE FOR SIM ➔ Quem trabalha no dia a dia com APIs? ➔ Quem conhece DDD? ➔ Quem aplica DDD na construção de APIs?
  • 3. ROTEIRO DE HOJE! 1 PRÁTICAS COMUNS EM APIs. 2 VISÃO RÁPIDA SOBRE DDD. 3 APLICANDO DDD NA CONSTRUÇÃO DE APIs!
  • 5. O que é uma API (Application Programming Interface) ? É uma interface de acesso às funções que um software disponibiliza.
  • 6. Uma API não é apenas HTTP/REST/JSON! ➔ WebService SOAP/XML, é API. ➔ Uma biblioteca JavaScript, é API. ➔ Classes abstratas ou interfaces no Java, são APIs. ➔ ...
  • 7. O que uma API não deve ser!?!? Ela não deve ser a implementação que contém regras de negócio. Uma API deve prover o acesso às regras de negócio! E... para a sequência deste papo, usaremos API Rest como base
  • 8. APIs que apenas expõe a modelagem do banco de dados. APIs modeladas de acordo com a UI da solução. Retornando às práticas comuns, temos:
  • 9. APIs que apenas expõe a modelagem do banco de dados. É comum… : ➔ Paths que representam diretamente o modelo do banco de dados, sejam tabelas, coleções, etc. ➔ Classes de ORM usadas também como mapeamento para composição das APIs. ➔ Colunas “internas” do banco expostas nas APIs. O que fazer quando?... ➔ Há uma mudança no banco de dados. ➔ Algumas colunas não devem ser expostas. ➔ Decide-se mudar a forma de persistência.
  • 10. APIs modeladas de acordo com a UI da solução É comum… : ➔ Paths que representam a navegação de menus/telas. ➔ Composição de atributos fortemente amarrados aos campos e usabilidade das telas. O que fazer quando?... ➔ A usabilidade das telas mudar. ➔ Haver versões com usabilidade diferente. ➔ Haver dispositivos com UI diferente. ➔ Um sistema terceiro precisar se integrar a API.
  • 12. ➔ Eric Evans ➔ Publicado em 2004. ➔ Possui 450+ páginas. Design Tático Design Estratégico Modelagem de domínio do negócio Padrões de arquitetura e de projeto
  • 13. Tático: 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
  • 14. Designed by pch.vector / Freepik Domain Model Ubiquitous Language Bounded Context Polissemia … no Estratégico:
  • 15. ➔ 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) Domain Model Ubiquitous Language Bounded Context Polissemia
  • 16. Quem? ➔ Profissionais na gestão e negócio. ➔ Designers. ➔ Desenvolvedores(as). ➔ Times de Operação. ➔ Times de Suporte. O uso de uma linguagem universal. Domain Model Ubiquitous Language Bounded Context Polissemia
  • 18. 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 Domain Model Ubiquitous Language Bounded Context Polissemia
  • 21. Domain Model Ubiquitous Language Bounded Context Polissemia “O coração do software…” A solução deve possuir um modelo de domínio!!! Uma boa API, passa por um entendimento claro do domínio, seus contextos, entidades, etc!
  • 23. Domain Model Ubiquitous Language Bounded Context Polissemia Contextos! Em uma API Rest, os contextos se tornam os paths de primeiro nível: ○ <host>/contas/... ○ <host>/estoque/... ○ <host>/vendas/... ○ <host>/entregas/... ○ <host>/cobranca/...
  • 24. Domain Model Ubiquitous Language Bounded Context Polissemia Características! Entidades! É a base para a composição dos contratos. ○ Entidades fortes, terão endpoints próprios. ○ Entidades fracas, podem ter endpoints ou estarem encapsuladas junto a outras entidades.
  • 25. Domain Model Ubiquitous Language Bounded Context Polissemia Nomenclaturas! A linguagem universal deve ser aplicada a tudo: ○ Paths/Endpoints. ○ Atributos. ○ Parâmetros na url. ○ etc...
  • 26. Domain Model Ubiquitous Language Bounded Context Polissemia Contratos respeitam os limites dos contextos! ○ Cada endpoints, possui Informação adequada ao o contexto. ○ Chaves de associação entre entidades de contextos diferentes são UUID, string humanizadas, etc..
  • 27. Domain Model Ubiquitous Language Bounded Context Polissemia Nomenclaturas não geram dúvidas! ○ Se um pedido tem endereço de entrega e de cobrança, não pode haver apenas um atributo de nome “endereço”. ○ Se o produto no contexto de vendas, é o que foi vendido, pode-se chamá-lo de “produto vendido”.
  • 28. DDD contribui para uso da abordagem de API First
  • 29. Pense no fluxo Modelo do banco de dados API API First UI Solução API API First Domain Model API UI Solução Regras de negócio Modelo do banco de dados Outros.... API First
  • 30. DDD contribui para construção de contratos mais claro a todos O que facilita inclusive o processo de documentação
  • 31. Uma API representa a camada Application Na visão de camadas propostas por DDD
  • 32. Em um monólito, ou um serviço específico, Controllers, Serializers, dentre outros, fazem parte dessa camada. Na visão de camadas propostas por DDD Deve-se evitar expor diretamente o modelo de dados concreto.
  • 33. Na visão de camadas propostas por DDD Já as regras de negócio fazem parte de Domain. Uma API determina como será o acesso ao Domain! Aplicando DDD, é possível que APIs de características diferentes usem o mesmo Domain
  • 34. Na visão de camadas propostas por DDD Em um arquitetura de microservices. Um API Gateway, pode fazer o papel da camada Application para endpoints/serviços.
  • 35. DDD na construção de APIs, também ajuda em: ➔ Contratos que foquem no negócio. ➔ Isolar os detalhes de implementação. ➔ Refatorações com menor impacto para quem utiliza a API. ➔ Documentações mais simples, com a mesma linguagem a todos.
  • 36. Use o Domain Model para modelar suas APIs! Construa sua API como uma camada Application.
  • 37. DDD contribui para APIs mais maduras e sustentáveis! Obrigado!
  • 38. Isaac Felisberto de Souza Engenheiro de Software isaacsouza@gmail.com linkedin.com/in/isaacfsouza Um guia para auxiliar o Desenvolvimento de Software. Através de conteúdo para desenvolvedores(as). www.guia.dev Guia Dev (linkedin.com/company/guiadev) @guia_dev Siga! e compartilhe ;-)