ddd - linguagem ubíqua
DESCRIPTION
NerdT@lk na Serasa, uma apresentação sobre a Linguagem Ubíqua baseada na apresentação de DDD do mestre e amigo Sérgio Lopes da Caelum =DTRANSCRIPT
![Page 2: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/2.jpg)
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...
![Page 3: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/3.jpg)
E aí Bregaida, beleza?!Estou precisando de um
sistema para minha loja de aeronaves.
![Page 4: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/4.jpg)
Domain-Driven Design
![Page 5: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/5.jpg)
Domain-Driven Design
![Page 6: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/6.jpg)
Teremos Tupis, Cherokees, Aeroboeiros,
Paulistinhas e outras aeronaves, com diferentes capacidades e potências.!
![Page 7: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/7.jpg)
?
![Page 8: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/8.jpg)
Hum...!Então se eu fizer
CapacidadeTO estender de AbstractAeronave, acho
que vai dar certo!
![Page 9: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/9.jpg)
?
![Page 10: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/10.jpg)
Domain
Negócio Complexo
Problema Real
Pessoas
Linguagem de Negócio
![Page 11: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/11.jpg)
ConversaSobre o domínio
Para criar um sistema
![Page 12: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/12.jpg)
ConversaSobre o domínio
Para criar um sistema
Precisamos falar a mesma língua!
![Page 13: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/13.jpg)
Língua Ubíqua (Ubiquitous Language)
![Page 14: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/14.jpg)
Temos hangares aqui no nosso espaço, com
vários aviões diferentes...
![Page 15: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/15.jpg)
Nosso cliente chegará no Hangar e usará o sistema para encontrar os melhores
aviões para sua necessidade.
![Page 16: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/16.jpg)
Por exemplo, temos aviões de diferentes cores
e capacidades.
![Page 17: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/17.jpg)
O cliente normalmente também
pode escolher pela empresa fabricante
(Embraer, Piper, Aviat, etc)
![Page 18: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/18.jpg)
Aviao !
-Cor -Capacidade - Fabricante
Cor !
-Nome
Capacidade !
(Potência, Quantidade Passageiros)
Fabricante !
(Piper, Embraer, Aviate, Boeing, etc)
![Page 19: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/19.jpg)
Isso mesmo e nossos aviões possuem um nome
e um prefixo que é sua identificação no Brasil.
![Page 20: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/20.jpg)
Aviao !
-id -Nome -Cor
-Capacidade - Fabricante
Cor !
-Nome
Capacidade !
(Potência, Quantidade Passageiros)
Fabricante !
(Piper, Embraer, Aviate, Boeing, etc)
![Page 21: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/21.jpg)
Exatamente, mas nosso cliente vai mesmo
querer pesquisar por Fabricante e nome da
aeronave.
![Page 22: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/22.jpg)
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
![Page 23: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/23.jpg)
Aliás outra busca que quero é dado um avião quero saber quais os aviões com mesma
potência.
![Page 24: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/24.jpg)
Creio que com esse nosso repositório fica mais
fácil de saber, né?
![Page 25: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/25.jpg)
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
![Page 26: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/26.jpg)
![Page 27: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/27.jpg)
public class Aviao {! private Long id; private String nome; ! private Fabricante fabricante; private Cor cor; private Capacidade capacidade;!}
!
![Page 28: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/28.jpg)
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}
![Page 29: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/29.jpg)
Repositório... BD? DAO? !
O que nosso cliente quer?
![Page 30: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/30.jpg)
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);!}
![Page 31: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/31.jpg)
Como implementar o Repositório?
![Page 32: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/32.jpg)
![Page 33: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/33.jpg)
![Page 34: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/34.jpg)
Poxa é isso mesmo que eu queria, está ficando
muito bom, porém esqueci que quero hangarar juntas
as aeronaves com a mesma potência.!
![Page 35: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/35.jpg)
Model
Código
![Page 36: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/36.jpg)
Model
Código
![Page 37: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/37.jpg)
public class Aviao { //Códigos anteriores... public boolean possuemMesmaPotencia(Aviao outroAviao){ return this.capacidade.getPotencia().equals(outroAviao.getPotencia());!}
!
![Page 38: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/38.jpg)
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!
![Page 39: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/39.jpg)
Não importa a tecnologia. O que importa é o domain.
![Page 40: DDD - Linguagem Ubíqua](https://reader031.vdocuments.mx/reader031/viewer/2022012317/55657e5fd8b42a723f8b4a05/html5/thumbnails/40.jpg)
[email protected] http://javawora.blogspot.com
http://www.slideshare.net/eduardo.bregaida @bregaida
Obrigado!