SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
@bregaida
eduardo.bregaida@br.experian.com
Havia um grande local cheio de aeronaves de um ricaço que morreu.	

James seu sobrinho herdou este local e decidiu que queria abrir um negócio.	

Uma loja de aeronaves.	

E para isso era necessário um sistema...
E aí Bregaida, beleza?!
Estou precisando de um
sistema para minha loja de
aeronaves.
Domain-Driven Design
Domain-Driven Design
Teremos Tupis,
Cherokees, Aeroboeiros,
Paulistinhas e outras
aeronaves, com diferentes
capacidades e potências.!
?
Hum...!
Então se eu fizer
CapacidadeTO estender de
AbstractAeronave, acho
que vai dar certo!
?
Negócio Complexo

Pessoas

Domain
Linguagem de Negócio

Problema Real
Conversa
Sobre o domínio
Para criar um sistema
Precisamos falar a mesma língua!	


Conversa
Sobre o domínio
Para criar um sistema
Língua Ubíqua	

(Ubiquitous Language)
Temos hangares aqui
no nosso espaço, com
vários aviões
diferentes...
Nosso cliente chegará no Hangar e usará
o sistema para encontrar os melhores
aviões para sua necessidade.
Por exemplo, temos
aviões de diferentes cores
e capacidades.
O cliente
normalmente também
pode escolher pela
empresa fabricante
(Embraer, Piper, Aviat,
etc)
Capacidade	

!

Aviao	

Cor	


!

!

-Cor	

-Capacidade	

- Fabricante

(Potência,
Quantidade
Passageiros)

-Nome

Fabricante	

!

(Piper, Embraer,
Aviate, Boeing, etc)
Isso mesmo e nossos
aviões possuem um nome
e um prefixo que é sua
identificação no Brasil.
Capacidade	

!

Aviao	

!

Cor	

!

-Nome

-id	

-Nome	

-Cor	

-Capacidade	

- Fabricante

(Potência,
Quantidade
Passageiros)

Fabricante	

!

(Piper, Embraer,
Aviate, Boeing, etc)
Exatamente, mas
nosso cliente vai mesmo
querer pesquisar por
Fabricante e nome da
aeronave.
Repositório de
aviões

buscarPorNome
buscarPorFabricante

Aviao	

!

Cor	

!

-Nome

-Prefixo	

-Nome	

-Cor	

-Capacidade	

- Fabricante

Capacidade	

!

(Potência,
Quantidade
Passageiros)
Fabricante	

!

(Piper, Embraer,
Aviate, Boeing, etc)
Aliás outra busca que
quero é dado um avião
quero saber quais os
aviões com mesma
potência.
Creio que com esse
nosso repositório fica mais
fácil de saber, né?
Repositório de
aviões

buscarPorNome
buscarPorFabricante

Aviao	

!

Cor	

!

-Nome

-Prefixo	

-Nome	

-Cor	

-Capacidade	

- Fabricante	

-AviõesComMesmaPotência

Capacidade	

!

(Potência,
Quantidade
Passageiros)
Fabricante	

!

(Piper, Embraer,
Aviate, Boeing, etc)
public class Aviao {	

!
	
	

private Long id;	
private String nome;

!
	
	
	

private Fabricante fabricante;	
private Cor cor;	
private Capacidade capacidade;	

!
}	

!
public class Fabricante {	

!
	

private String nome;	

!
	
}	

//getters & setters	

!

!
!

public class Cor {	

!
	

private String nome;	

!
	
}

//getters & setters	

!
!
public class Capacidade {	

!
	
	

private String potencia;	
private String quantidadePassageiro;	

!
	
}

//getters & setters
Repositório... BD? DAO?	

!

O que nosso cliente quer?
public class AviaoRepository {	

!
	
	
	
	
	

!
}

List<Aviao> getTodosAvioes();	
List<Aviao> getAvioesPorNome(String nome);	
List<Aviao> getAvioesPorFabricante(Fabricante fabricante);	
List<Aviao> getAvioesPorCapacidade(Capacidade capacidade);	
Aviao getAviaoPorId(Long id);
Como implementar o
Repositório?
Poxa é
isso mesmo que eu
queria, está ficando
muito bom, porém esqueci
que quero hangarar juntas
as aeronaves com a
mesma potência.!
Model

Código
Model

Código
public class Aviao {	
	
	
	
	

//Códigos anteriores...	
public boolean possuemMesmaPotencia(Aviao outroAviao){
	 return this.capacidade.getPotencia().equals(outroAviao.getPotencia());	

!
}	

!
Domain-Driven Design
•
•
•
•
•

Voltado (driven) totalmente ao problema a ser resolvido (domain)	

Ubiquitous Language	

Funciona muito bem com Agile	

Modelos ricos (não anêmicos)	

Nomes importam!
Não importa a tecnologia. O que
importa é o domain.

Obrigado!

eduardo.bregaida@br.experian.com	

http://javawora.blogspot.com	

http://www.slideshare.net/eduardo.bregaida	

@bregaida

Mais conteúdo relacionado

Destaque

Apresentação BDD
Apresentação BDDApresentação BDD
Apresentação BDDTiago Link
 
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...Yan Justino
 
Cultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilCultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilEduardo Bregaida
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz QuestionsGanesh Samarthyam
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz QuestionsGanesh Samarthyam
 
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOYan Justino
 
Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebCícero Quarto
 
Get into Functional Programming with Clojure
Get into Functional Programming with ClojureGet into Functional Programming with Clojure
Get into Functional Programming with ClojureJohn Stevenson
 
Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)Eduardo Bregaida
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e PráticaEduardo Pires
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time APISualeh Fatehi
 

Destaque (15)

DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
 
Apresentação BDD
Apresentação BDDApresentação BDD
Apresentação BDD
 
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
 
Cultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilCultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágil
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz Questions
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz Questions
 
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
 
Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide Web
 
Get into Functional Programming with Clojure
Get into Functional Programming with ClojureGet into Functional Programming with Clojure
Get into Functional Programming with Clojure
 
Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e Prática
 
Sailing with Java 8 Streams
Sailing with Java 8 StreamsSailing with Java 8 Streams
Sailing with Java 8 Streams
 
TDD - Agile
TDD - Agile TDD - Agile
TDD - Agile
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
 

Mais de Eduardo Bregaida

Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2Eduardo Bregaida
 
Treinamento Agile com scrum
Treinamento Agile com scrumTreinamento Agile com scrum
Treinamento Agile com scrumEduardo Bregaida
 
Aviação Civil LT sciensa
Aviação Civil  LT sciensaAviação Civil  LT sciensa
Aviação Civil LT sciensaEduardo Bregaida
 
Management 3.0 - V. Revisada
Management 3.0 - V. RevisadaManagement 3.0 - V. Revisada
Management 3.0 - V. RevisadaEduardo Bregaida
 
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão JavaCultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão JavaEduardo Bregaida
 
Scrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tourScrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tourEduardo Bregaida
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeisFalhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeisEduardo Bregaida
 
Cloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs FinalCloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs FinalEduardo Bregaida
 
Metodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr HouseMetodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr HouseEduardo Bregaida
 
Java E O Mercado De Trabalho
Java E O Mercado De TrabalhoJava E O Mercado De Trabalho
Java E O Mercado De TrabalhoEduardo Bregaida
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 

Mais de Eduardo Bregaida (20)

War Room - Bregaida - V1
War Room - Bregaida - V1War Room - Bregaida - V1
War Room - Bregaida - V1
 
Feedbacks - V1
Feedbacks - V1Feedbacks - V1
Feedbacks - V1
 
Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2
 
Treinamento Agile com scrum
Treinamento Agile com scrumTreinamento Agile com scrum
Treinamento Agile com scrum
 
Aviação Civil LT sciensa
Aviação Civil  LT sciensaAviação Civil  LT sciensa
Aviação Civil LT sciensa
 
Management 3.0 - V. Revisada
Management 3.0 - V. RevisadaManagement 3.0 - V. Revisada
Management 3.0 - V. Revisada
 
Minha história
Minha históriaMinha história
Minha história
 
Aula 15 minutos
Aula 15 minutosAula 15 minutos
Aula 15 minutos
 
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão JavaCultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
 
Scrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tourScrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tour
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeisFalhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
 
Virus em Hw
Virus em HwVirus em Hw
Virus em Hw
 
JSF & REST
JSF & RESTJSF & REST
JSF & REST
 
Cloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs FinalCloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs Final
 
Metodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr HouseMetodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr House
 
Java E O Mercado De Trabalho
Java E O Mercado De TrabalhoJava E O Mercado De Trabalho
Java E O Mercado De Trabalho
 
Agile SCRUM
Agile SCRUMAgile SCRUM
Agile SCRUM
 
ApresentaçãO De Java
ApresentaçãO De JavaApresentaçãO De Java
ApresentaçãO De Java
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 

DDD - Linguagem Ubíqua