@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

DDD - Linguagem Ubíqua