Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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
Upcoming SlideShare
Loading in …5
×

Java+DDD+BDD+TDD=Sucesso Total

783 views

Published on

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

Published in: 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!

×