eduardo.bregaida
1,135 views
68 slides
Aug 18, 2015
Slide 1 of 68
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
About This Presentation
Apresentação realizada no Java Meetup 20/08/2015
Size: 9.85 MB
Language: pt
Added: Aug 18, 2015
Slides: 68 pages
Slide Content
Quem Sou?
10 anos como Dev Java 6 anos como Scrum Master
Atualmente Aspirante a Piloto Comercial de Avião
@bregaida [email protected]
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 queria abrir um negócio.
Uma loja de aeronaves.
E para isso era necessário um sistema...
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)
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.
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.
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 …
•
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
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 …
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.
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çõ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.
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 Ciclo Vermelho-Verde-Refatora
(Red - Green - Refactor).
BDD + TDD
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