SlideShare a Scribd company logo
1 of 81
Download to read offline
Domain Driven Design 
Workshop 
Mário Amaral 
@mario_fts 
github.com/mariofts 
mario.amaral@caelum.com.br 
Saturday, September 6, 14
Quem sou eu? 
•Mário Amaral 
• Instrutor e 
desenvolvedor 
• Caelum-Stella 
• VRaptor4 
Saturday, September 6, 14
Vamos começar? 
Saturday, September 6, 14
Mas Primeiro... 
Saturday, September 6, 14
Modelando nosso 
sistema! 
Saturday, September 6, 14
Saturday, September 6, 14
Funcionalidades 
Saturday, September 6, 14
I - Why DDD? 
Saturday, September 6, 14
Você já: 
• Olhou para um código e não entendeu 
o que ele fazia? 
• Programou alguma funcionalidade e 
não entendeu o que estava fazendo? 
Saturday, September 6, 14
Problema: 
Comunicação 
Saturday, September 6, 14
Premissas 
• “For most software projects, the 
primary focus should be on the 
domain and domain logic.” 
• “Complex domain designs should be 
based on a model.” 
Saturday, September 6, 14
“Domain driven design is not a technology or a 
methodology. Its a way of thinking and a set of 
priorities, aimed an accelerating software projects 
that have to deal with complicated domains.” 
Saturday, September 6, 14
Dividir para conquistar 
Saturday, September 6, 14
Camadas 
Saturday, September 6, 14
Saturday, September 6, 14
User Interface 
Application 
Domain 
Infrastructure 
Saturday, September 6, 14
Domain 
Saturday, September 6, 14
Comunicação 
Saturday, September 6, 14
Ruído sintático 
• Causado pela diferença de 
representações 
• Código != Linguagem escrita / falada 
Saturday, September 6, 14
Ruído Semântico 
• Diferença entre como o usuário pensa 
em um conceito e como ele é 
implementado 
• Erros de comunicação e entendimento 
• Necessita de constante tradução 
Saturday, September 6, 14
Ruído 
Sintático 
Ruído 
Semântico 
Saturday, September 6, 14
Ruído 
Sintático 
Ruído 
} Domain Driven 
Semântico Design 
Saturday, September 6, 14
Ruído 
Sintático 
}Domain Specific 
Languages 
Ruído 
Semântico Saturday, September 6, 14
Como se livrar do 
rúido e melhorar a 
comunicação ? 
Saturday, September 6, 14
Linguagem ubíqua 
• Linguagem única de comunicação 
• Baseada no domínio (negócio) 
• Está em toda a parte 
• Pode ser uma versão simplificada do 
domínio real 
Saturday, September 6, 14
Saturday, September 6, 14
Posso usar DDD no meu 
sistema? 
• Pré-requisitos 
• Acesso aos especialistas de domínio 
• Processo Iterativo 
• Contexto definido 
• Habilidade do time 
Saturday, September 6, 14
Vamos modelar? 
Saturday, September 6, 14
Juntando os pedaços 
E aplicando a linguagem ubíqua... 
Saturday, September 6, 14
II - Building Blocks 
Saturday, September 6, 14
Patterns 
• Entity 
• Value Object 
• Aggregates 
• Service 
• Repository 
• Domain Event (Bonus Track) 
Saturday, September 6, 14
Entity 
• Idéia de identidade 
• Mutável 
• Id não necessariamente o do banco 
Saturday, September 6, 14
Value Object 
• Não tem identidade 
• O importante é o valor que carregam 
• Imutável 
Saturday, September 6, 14
Aggregates 
• Associações entre Entities ou Value 
Objects 
• Tem um objeto principal (root/raiz) 
• Tratado como uma coisa só 
• Sistema só deve manter referências 
para a raiz do aggregate 
Saturday, September 6, 14
Carro como Aggregate 
Saturday, September 6, 14
Services 
• Ações que não pertencem a nenhum 
objeto do domínio 
• Faze parte do domínio 
• Stateless 
• Deveriam existir poucos... 
Saturday, September 6, 14
Repository 
• Abstrai do domínio o acesso a dados 
• Coleções de objetos, mas com 
capacidade de queries avançadas 
• Não necessariamente um por Entity 
Saturday, September 6, 14
Domain Events 
• Capturar coisas que podem disparar 
uma mudança no estado do domínio 
• Ótimo para integrar domínios 
diferentes 
Saturday, September 6, 14
Vamos modelar? 
Saturday, September 6, 14
III - Contexts 
Saturday, September 6, 14
Será que o sistema 
todo é uma coisa só? 
Saturday, September 6, 14
Os cegos e o elefante 
John Godfrery Saxe (1816-1887) 
Saturday, September 6, 14
Saturday, September 6, 14
Saturday, September 6, 14
Saturday, September 6, 14
Bounded Context 
• Fronteira bem definida entre os 
diversos domínios dentro do sistema 
• Delimita a aplicabilidade de um certo 
modelo. 
Saturday, September 6, 14
Um só contexto 
Saturday, September 6, 14
Múltiplos contextos 
Saturday, September 6, 14
Vários tipos de contextos 
• Generic Subdomains 
• Supporting Subdomain 
• Core domain 
Saturday, September 6, 14
Generic Context 
• Existe no seu sistema, e em muitos 
outros. 
• Não é o foco, mas você precisa fazer. 
• Ex: Contabilidade 
• Pode ser comprado ou terceirizado 
completamente 
Saturday, September 6, 14
Supporting Context 
• Específico seu 
• Não é a funcionalidade principal do 
seu software 
Saturday, September 6, 14
Core domain 
• Resolve o problema principal da 
empresa 
• É por essa parte que as pessoas usam 
seu produto 
• é suportado pelos outros contextos 
• é a menor parte do sistema 
(geralmente) 
Saturday, September 6, 14
Saturday, September 6, 14
Saturday, September 6, 14
Saturday, September 6, 14
Saturday, September 6, 14
Outros Contextos 
• Sistema legado 
• Serviço remoto 
• Partes do software que você não 
controla 
• Base legada 
Saturday, September 6, 14
Vamos modelar? 
Saturday, September 6, 14
IV - Integrating 
Contexts 
Saturday, September 6, 14
Como integrar 
contextos diferentes? 
Saturday, September 6, 14
Sempre haverão 
outros domínios 
e outros modelos... 
Saturday, September 6, 14
Saturday, September 6, 14
Context Maps 
Transition Map 
Saturday, September 6, 14
Context Maps 
Transition Map 
D U 
U 
U 
D 
D 
Saturday, September 6, 14
Alguns patterns para 
integração 
• Open Host Services 
• Published Language 
• Anti Corruption Layer 
Saturday, September 6, 14
Open Host Service 
• O outro contexto é acessado por meio 
de um serviço 
• Pode ser um serviço dentro do seu 
domínio, desde que isole o contexto 
Saturday, September 6, 14
Published Languages 
• Modelo “público” daquele subdomínio 
• Parecido com modelo canônico (SOA) 
• Pode ser um subconjunto da 
linguagem daquele subdomínio 
Saturday, September 6, 14
Anti Corruption Layer 
• Camada de conversão 
• Evita que termos estranhos entrem no 
domínio 
• Geralmente na ponta “D” da 
integração 
• Não é parte do domínio 
x 
Saturday, September 6, 14
V - DDD in Legacy 
Systems 
Saturday, September 6, 14
Big Ball of Mud 
Saturday, September 6, 14
Bubble Context 
• Não precisa de “muito DDD” 
• Alguns dados do legado 
• Isole o legado em uma bolha 
• Consulte o que precisar e modifique 
para seu domínio (ACL) 
Saturday, September 6, 14
Saturday, September 6, 14
Saturday, September 6, 14
Autonomous Bubble 
• Mais DDD 
• Isole seu sistema do legado e faça a 
comunicação assíncrona 
• Pode ser uma evolução da bolha 
• Novo contexto autônomo (novo 
sistema?) 
Saturday, September 6, 14
Saturday, September 6, 14
Saturday, September 6, 14
LAAS - legacy as a 
service 
• Pouco DDD 
• Só algumas funcionalidades do legado 
• Pouco acoplamento com o legado 
Saturday, September 6, 14
Domain Event Channel 
• Mais DDD 
• Desenvolvimento independente entre 
os contextos 
• Comunicação entre os contextos é 
feito por eventos em um canal global 
Saturday, September 6, 14
Saturday, September 6, 14
Referências 
• http://domainlanguage.com/newsletter/2010-09/ 
• http://domainlanguage.com/newsletter/2011-06/ 
• http://www.infoq.com/presentations/design-strategic- 
eric-evans 
• http://domainlanguage.com/ddd/patterns/ 
DDD_Reference_2011-01-31.pdf 
• http://www.laputan.org/mud/ 
• http://www.infoq.com/author/Eric-Evans 
• http://dddcommunity.org 
Saturday, September 6, 14
Domain Driven Design 
Workshop 
Obrigado! 
Mário Amaral 
@mario_fts 
github.com/mariofts 
mario.amaral@caelum.com.br 
Saturday, September 6, 14

More Related Content

Viewers also liked

DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignÍtalo Bandeira
 
Story and Emergent Design
Story and Emergent DesignStory and Emergent Design
Story and Emergent DesignHugh Graham
 
Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Alan Christensen
 
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecerInterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouqueceriMasters
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NETFabiano Roman Beraldi
 
Emergent design - PHP Jo'burg 2015
Emergent design - PHP Jo'burg 2015Emergent design - PHP Jo'burg 2015
Emergent design - PHP Jo'burg 2015rouanw
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
ASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NETASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NETEduardo Pires
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven DesignRafael Ponte
 
Domain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCDomain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCSteven Smith
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#Pascal Laurin
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureThoughtworks
 
Refactoring, Emergent Design & Evolutionary Architecture
Refactoring, Emergent Design & Evolutionary ArchitectureRefactoring, Emergent Design & Evolutionary Architecture
Refactoring, Emergent Design & Evolutionary ArchitectureBrad Appleton
 

Viewers also liked (16)

Introdução ao DDD
Introdução ao DDDIntrodução ao DDD
Introdução ao DDD
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
Story and Emergent Design
Story and Emergent DesignStory and Emergent Design
Story and Emergent Design
 
Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Domain Driven Design Demonstrated
Domain Driven Design Demonstrated
 
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecerInterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NET
 
Web Services Rest
Web Services RestWeb Services Rest
Web Services Rest
 
Emergent design - PHP Jo'burg 2015
Emergent design - PHP Jo'burg 2015Emergent design - PHP Jo'burg 2015
Emergent design - PHP Jo'burg 2015
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
ASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NETASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NET
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
Domain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCDomain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVC
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
 
Refactoring, Emergent Design & Evolutionary Architecture
Refactoring, Emergent Design & Evolutionary ArchitectureRefactoring, Emergent Design & Evolutionary Architecture
Refactoring, Emergent Design & Evolutionary Architecture
 

Similar to Workshop DDD

Introducao desenvolvimento-web
Introducao desenvolvimento-webIntroducao desenvolvimento-web
Introducao desenvolvimento-webMarcio Mota
 
Locaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialLocaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialFernando Hamasaki de Amorim
 
Cloud Computing + Microsoft Azure: visão geral e primeiros passos - Fatec Sor...
Cloud Computing + Microsoft Azure: visão geral e primeiros passos - Fatec Sor...Cloud Computing + Microsoft Azure: visão geral e primeiros passos - Fatec Sor...
Cloud Computing + Microsoft Azure: visão geral e primeiros passos - Fatec Sor...Renato Groffe
 
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnósticaCase RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnósticaAlessandro Binhara
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaGabriel Molter
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Renato Groff
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Renato Groffe
 
IntroduçãO Ao Desenvolvimento Web 2
IntroduçãO Ao Desenvolvimento Web   2IntroduçãO Ao Desenvolvimento Web   2
IntroduçãO Ao Desenvolvimento Web 2Maurício Linhares
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de DesenvolvimentoAlvaro Viebrantz
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021Renato Groffe
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsRafael Salerno de Oliveira
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Renato Groff
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Renato Groff
 
Portando Aplicações Para a Plataforma Maemo
Portando Aplicações Para a Plataforma MaemoPortando Aplicações Para a Plataforma Maemo
Portando Aplicações Para a Plataforma MaemoEduardo Lima
 
Tecnologias Microsoft em Linux: .NET Core, SQL Server e Visual Studio Code - ...
Tecnologias Microsoft em Linux: .NET Core, SQL Server e Visual Studio Code - ...Tecnologias Microsoft em Linux: .NET Core, SQL Server e Visual Studio Code - ...
Tecnologias Microsoft em Linux: .NET Core, SQL Server e Visual Studio Code - ...Renato Groff
 
Ruby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkRuby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkGuilherme Carlos
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 

Similar to Workshop DDD (20)

Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
Introducao desenvolvimento-web
Introducao desenvolvimento-webIntroducao desenvolvimento-web
Introducao desenvolvimento-web
 
Locaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialLocaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercial
 
Cloud Computing + Microsoft Azure: visão geral e primeiros passos - Fatec Sor...
Cloud Computing + Microsoft Azure: visão geral e primeiros passos - Fatec Sor...Cloud Computing + Microsoft Azure: visão geral e primeiros passos - Fatec Sor...
Cloud Computing + Microsoft Azure: visão geral e primeiros passos - Fatec Sor...
 
Meetup Everis Cassandra
Meetup Everis CassandraMeetup Everis Cassandra
Meetup Everis Cassandra
 
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnósticaCase RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e Prática
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
 
IntroduçãO Ao Desenvolvimento Web 2
IntroduçãO Ao Desenvolvimento Web   2IntroduçãO Ao Desenvolvimento Web   2
IntroduçãO Ao Desenvolvimento Web 2
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
 
Portando Aplicações Para a Plataforma Maemo
Portando Aplicações Para a Plataforma MaemoPortando Aplicações Para a Plataforma Maemo
Portando Aplicações Para a Plataforma Maemo
 
Tecnologias Microsoft em Linux: .NET Core, SQL Server e Visual Studio Code - ...
Tecnologias Microsoft em Linux: .NET Core, SQL Server e Visual Studio Code - ...Tecnologias Microsoft em Linux: .NET Core, SQL Server e Visual Studio Code - ...
Tecnologias Microsoft em Linux: .NET Core, SQL Server e Visual Studio Code - ...
 
Ruby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkRuby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao Framework
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 

Workshop DDD