ddd - linguagem ubíqua
Post on 27-May-2015
1.837 Views
Preview:
DESCRIPTION
TRANSCRIPT
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!
?
Domain
Negócio Complexo
Problema Real
Pessoas
Linguagem de Negócio
ConversaSobre o domínio
Para criar um sistema
ConversaSobre o domínio
Para criar um sistema
Precisamos falar a mesma língua!
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)
Aviao !
-Cor -Capacidade - Fabricante
Cor !
-Nome
Capacidade !
(Potência, Quantidade Passageiros)
Fabricante !
(Piper, Embraer, Aviate, Boeing, etc)
Isso mesmo e nossos aviões possuem um nome
e um prefixo que é sua identificação no Brasil.
Aviao !
-id -Nome -Cor
-Capacidade - Fabricante
Cor !
-Nome
Capacidade !
(Potência, Quantidade Passageiros)
Fabricante !
(Piper, Embraer, Aviate, Boeing, etc)
Exatamente, mas nosso cliente vai mesmo
querer pesquisar por Fabricante e nome da
aeronave.
Aviao !
-Prefixo -Nome -Cor
-Capacidade - Fabricante
Cor !
-Nome
Capacidade !
(Potência, Quantidade Passageiros)
Fabricante !
(Piper, Embraer, Aviate, Boeing, etc)
Repositório de aviões
buscarPorNome buscarPorFabricante
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é?
Aviao !
-Prefixo -Nome -Cor
-Capacidade - Fabricante
-AviõesComMesmaPotência
Cor !
-Nome
Capacidade !
(Potência, Quantidade Passageiros)
Fabricante !
(Piper, Embraer, Aviate, Boeing, etc)
Repositório de aviões
buscarPorNome buscarPorFabricante
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.
eduardo.bregaida@br.experian.com http://javawora.blogspot.com
http://www.slideshare.net/eduardo.bregaida @bregaida
Obrigado!
top related