Quem Sou?
10 anos como Dev Java 6 anos como Scrum Master
Atualmente Aspirante a Piloto Comercial de Avião
@bregaida
eduard...


Mas o que é DDD?
• DDD?
• DDD? • DDD?
• DDD? • DDD?
• DDD?
• DDD? • DDD?
• DDD? • DDD?
• DDD? • DDD?
• DDD? • DDD?
Havia um grande local cheio de aeronaves de um ricaço que morreu.
James, seu sobrinho, herdou este local e decidiu que que...
E aí Bregaida,
beleza?
Estou precisando de sua
ajuda mais uma vez,
preciso 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
Conversa
Sobre o domínio
Para criar um sistema
Conversa
Sobre 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.
Normalmente o
cliente 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,
Av...
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
(Airbus, ...
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)
Repositório de
a...
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
Passa...
public class Aviao {
private Long id;
private String nome;
private Fabricante fabricante;
private Cor cor;
private Capacid...
public class Fabricante {
private String nome;
//getters & setters
}
public class Cor {
private String nome;
//getters & s...
Repositório... BD? DAO?
O que nosso cliente quer?
public interface AviaoRepository {
List<Aviao> getTodosAvioes();
List<Aviao> getAvioesPorNome(String nome);
List<Aviao> ge...
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 p...
Model
Código
Model
Código
public class Aviao {
//Códigos anteriores...
public boolean possuemMesmaPotencia(Aviao outroAviao){
return this.capacidade...
Domain-Driven Design
• Voltado (driven) totalmente ao problema a ser resolvido (domain)
• Ubiquitous Language
• Funciona m...
Não importa a tecnologia. O que
importa é o domain.

http://image.slidesharecdn.com/bddextent20111029-111113010328-phpapp01/95/behavior-driven-development-pros-and-cons-5-728....


Mas o que é BDD?
O que é BDD?
• Foca no comportamento do sistema;
• Visando desenvolvimento voltado a testes;
• Usam uma linguagem comum co...
Como fazer?
• Narrativa/Estória: (Nome)
• Para (Valor ao Negócio)
• Eu, como (Papel)
• Desejo poder realizar (Funcionalida...
• Narrativa/Estória: Busca Por Aeronaves
• Para meu sistema de vendas de aeronaves
• Eu, como cliente
• Desejo poder reali...
O que mais?
• Cenários: (Nome)
• Dado que (Estado inicial do sistema)
• Quando (Ação a ser realizada)
• Então (O que deve ...
Exemplo
• Cenário I: Busca Aeronaves por nome
• Dado que meu cliente digite o nome da Aeronave
• Quando clicar no botão bu...
TDD


Mas o que é TDD?
O que é TDD ou Test Driven Development?
• É uma técnica de desenvolvimento de software baseada em um ciclo curto de repeti...
TDD - Test Driven Development
• Escreva um teste que falhe;
• Faça-o passar da maneira mais simples possível;
• Refatore o...
BDD + TDD
Ferramentas
• ASSpec
• BDoc
• BDD para Python
• Behat - PHP
• Bumblebee - Extrai documentação de
testes escritos com JUnit...
Referências
• https://en.wikipedia.org/wiki/Behavior-driven_development
• http://eduardopires.net.br/2012/06/ddd-tdd-bdd/
...
Referências II• http://www.infoq.com/br/news/2014/09/dddx-evans-challenging
• https://skillsmatter.com/conferences/1776-dd...
Dúvidas?
Eduardo Bregaida - @bregaida
eduardo.bregaida@gmail.com
http://javawora.blogspot.com.br
Obrigado!
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
Próximos SlideShares
Carregando em…5
×

Java+DDD+BDD+TDD=Sucesso Total

673 visualizações

Publicada em

Apresentação realizada no Java Meetup 20/08/2015

Publicada em: Software

Java+DDD+BDD+TDD=Sucesso Total

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

  43. 43. http://image.slidesharecdn.com/bddextent20111029-111113010328-phpapp01/95/behavior-driven-development-pros-and-cons-5-728.jpg?cb=1321171622
  44. 44. 
 Mas o que é BDD?
  45. 45. O que é BDD? • Foca no comportamento do sistema; • Visando desenvolvimento voltado a testes; • Usam uma linguagem comum como visto no DDD; • Beneficia os desenvolvedores e os usuários de negócio; • Comporta vários cenários; • Não apenas o que uma determinada função deve fazer; • Possui aspectos do DDD e conceitos fundamentais do TDD.
  46. 46. Como fazer? • Narrativa/Estória: (Nome) • Para (Valor ao Negócio) • Eu, como (Papel) • Desejo poder realizar (Funcionalidade) • Story: … • In order to … • As a … • I want to …
  47. 47. • Narrativa/Estória: Busca Por Aeronaves • Para meu sistema de vendas de aeronaves • Eu, como cliente • Desejo poder realizar buscas por nome das Aeronaves Exemplo
  48. 48. O que mais? • Cenários: (Nome) • Dado que (Estado inicial do sistema) • Quando (Ação a ser realizada) • Então (O que deve fazer após a ação) • Scenario: … • Given a … • And … • When … • Then …
  49. 49. Exemplo • Cenário I: Busca Aeronaves por nome • Dado que meu cliente digite o nome da Aeronave • Quando clicar no botão buscar • Então o sistema deverá retornar todas as aeronaves disponíveis com aquele nome.
  50. 50. TDD
  51. 51. 
 Mas o que é TDD?
  52. 52. O que é TDD ou Test Driven Development? • É uma técnica de desenvolvimento de software baseada em um ciclo curto de repetições. • Escrevendo seus testes antes de escrever o código de produção. • Ao escrever primeiro os testes: • Garantimos uma boa qualidade no código (mínimo de sujeira e códigos esquecidos que nunca serão utilizados). • Garantimos o funcionamento do que está sendo implementado. • Não precisamos saber tudo de uma vez, conforme eu desenvolvo um teste, crio e implemento as classes que serão utilizadas.
  53. 53. TDD - Test Driven Development • Escreva um teste que falhe; • Faça-o passar da maneira mais simples possível; • Refatore o código. • É conhecido como CicloVermelho-Verde-Refatora (Red - Green - Refactor).
  54. 54. BDD + TDD
  55. 55. Ferramentas • ASSpec • BDoc • BDD para Python • Behat - PHP • Bumblebee - Extrai documentação de testes escritos com JUnit. • beanSpec - Java • Calabash - Permite rodar testes em aplicativos móveis para Android e iOS • CppSpec - C++ • cfSpec - ColdFusion • CSpec - C • dSpec - Delphi • Concordion - Ferramenta de testes automatizados em Java para fazer BDD usando textos em HTML para descrever comportamentos. • Cucumber - (Java, .NET, Ruby, Flex ou qualquer aplicação web através do Watir ou Selenium) • easyb - Groovy/Java • EasySpec - Groovy, usável em Java • GSpec - Groovy • Instinct - Java • JavaStubs - Java - Framework de BDD com suporte a Mock e Method Stubbing • JBee - Java • JBehave - Java E muitas outras… https://pt.wikipedia.org/wiki/Behavior_Driven_Development#Ferramentas
  56. 56. Referências • https://en.wikipedia.org/wiki/Behavior-driven_development • http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ • http://sobrecodigo.com/wp-content/uploads/2011/03/tdd_bdd.png • http://www.princiweb.com.br/blog/programacao/tdd/tdd-ddd-e-bdd-praticas-de-desenvolvimento.html • http://www.hascode.com/2011/05/oh-jbehave-baby-behaviour-driven-development-using-jbehave/ • http://arnauld.github.io/incubation/jbehave-get-started/bdd-cycle-around-tdd-cycles.png • https://anoopjshetty.files.wordpress.com/2012/03/bdd.png • https://pt.wikipedia.org/wiki/Behavior_Driven_Development#Ferramentas • http://www.ianbicking.org/ • http://docs.behat.org/en/v2.5/ • http://www.agileandart.com/2010/07/16/ddd-introducao-a-domain-driven-design/ • http://pt.slideshare.net/engenhariadesoftwareagil/ddd-domain-driven-design-5139191 • http://pt.slideshare.net/rponte/entendendo-domaindriven-design?related=1 • http://pt.slideshare.net/giovanni.bassi/programando-com-prazer-com-ddd?related=2 • http://pt.slideshare.net/eduardo.bregaida/ddd-linguagem?related=3 • http://www.infoq.com/br/domain-driven-design • http://martinfowler.com/tags/domain%20driven%20design.html • http://www.methodsandtools.com/archive/archive.php?id=97
  57. 57. Referências II• http://www.infoq.com/br/news/2014/09/dddx-evans-challenging • https://skillsmatter.com/conferences/1776-ddd-exchange-2014 • https://en.wikipedia.org/wiki/Domain-driven_design • http://martinfowler.com/bliki/UbiquitousLanguage.html • http://www.buscape.com.br/domain-driven-design-atacando-as-complexidades-no-coracao-do-software-2-ed-2011-eric- evans-8576085046.html#precos • http://javawora.blogspot.com.br/2012/05/tdd-test-driven-development.html • https://pt.wikipedia.org/wiki/Test_Driven_Development • http://www.devmedia.com.br/test-driven-development-tdd-simples-e-pratico/18533 • http://tdd.caelum.com.br/ • http://tableless.com.br/tdd-por-que-usar/ • http://blog.thiagobelem.net/aprendendo-tdd-ou-desenvolvimento-orientado-a-testes/ • http://www.casadocodigo.com.br/products/livro-tdd • http://agiledata.org/essays/tdd.html • http://www.desenvolvimentoagil.com.br/xp/praticas/tdd/ • http://imasters.com.br/artigo/24242/desenvolvimento/principios-de-test-driven-development-tdd/ • http://www.johnidouglas.com.br/wp-content/uploads/2014/02/tdd-post.png • http://pt.slideshare.net/IosifItkin/behavior-driven-development-pros-and-cons • https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTAodyDP0DbiRihtiJcWt_slpWtYj4ynHENiYutmBWyXIA4HUSm
  58. 58. Dúvidas?
  59. 59. Eduardo Bregaida - @bregaida eduardo.bregaida@gmail.com http://javawora.blogspot.com.br Obrigado!

×