DDD - Linguagem Ubíqua

4.200 visualizações

Publicada em

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 =D

Publicada em: Tecnologia, Negócios

DDD - Linguagem Ubíqua

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

  37. 37. Obrigado! eduardo.bregaida@br.experian.com http://javawora.blogspot.com http://www.slideshare.net/eduardo.bregaida @bregaida

×