Mais conteúdo relacionado
Domain Driven Design - Sergio Lopes - Falando em Java 2008
- 33. Por exemplo,
temos peixes aqui de
várias cores. O cliente vai
querer escolher uma cor que
combine melhor com seu
aquário e sua casa.
- 34. Por exemplo,
temos peixes aqui de
várias cores. O cliente vai
querer escolher uma cor que
combine melhor com seu
aquário e sua casa.
- 39. Peixe
- cor
Cor -espécie
-nome
- 40. Peixe
- cor
Cor -espécie Espécie
-nome (Tilápia, Lambari,
Carpa, ...)
- 44. Peixe
- id
- nome
- cor
Cor -espécie Espécie
-nome (Tilápia, Lambari,
Carpa, ...)
- 45. Mas nosso cliente geralmente
vai estar interessado em buscar
apenas por cor e espécie...
- 46. Mas nosso cliente geralmente
vai estar interessado em buscar
apenas por cor e espécie...
- 49. Peixe
- id
- nome
- cor
Cor -espécie Espécie
-nome (Tilápia, Lambari,
Carpa, ...)
- 50. Repositório
de Peixes
Peixe
- id
- nome
- cor
Cor -espécie Espécie
-nome (Tilápia, Lambari,
Carpa, ...)
- 51. Repositório
de Peixes
buscarPorCor
buscarPorEspécie
Peixe
- id
- nome
- cor
Cor -espécie Espécie
-nome (Tilápia, Lambari,
Carpa, ...)
- 52. E, viu, outro tipo de
busca que normalmente quero
saber é, dado um peixe, dizer quais
são os peixes irmãos dele, os da
mesma espécie.
- 53. E, viu, outro tipo de
busca que normalmente quero
saber é, dado um peixe, dizer quais
são os peixes irmãos dele, os da
mesma espécie.
- 56. Repositório
de Peixes
buscarPorCor
buscarPorEspécie
Peixe
- id
- nome
- cor
Cor -espécie Espécie
-nome - irmãos (Tilápia, Lambari,
Carpa, ...)
- 58. public class Peixe {
private Long id;
private String nome;
private Especie especie;
private Cor cor;
}
- 59. public enum Especie {
TILÁPIA, CARPA, LAMBARI, TRAÍRA;
}
public class Cor {
private String nome;
public Cor(String cor) {
this.nome = cor;
}
public String getNome() {
return this.nome;
}
@Override
public String toString() {
return this.nome;
}
}
- 61. public interface PeixeRepository {
List<Peixe> getTodosOsPeixes();
List<Peixe> getPeixesDeCor(Cor cor);
List<Peixe> getPeixesDaEspecie(Especie especie);
Peixe getPeixePeloId(Long id);
}
- 62. // quero saber os irmaos do Peixe
public class Peixe {
// .....
private PeixeRepository peixeRepository;
public void setPeixeRepository(PeixeRepository peixeRepository) {
this.peixeRepository = peixeRepository;
}
public List<Peixe> getPeixesIrmaos() {
return this.peixeRepository.getPeixesDaEspecie(this.especie);
}
}
- 68. Mas eu esqueci um
negócio: os clientes aqui, quando
compram seus peixes, também
querem saber se os peixes podem
viver no mesmo aquário
- 69. Mas eu esqueci um
negócio: oséclientes aqui, quando
A regra bem simples: para
compram seus peixes, podem viver
os nossos peixes, só também
juntos se forem da mesma espécie.
querem saber se os peixes podem
Seria legal verificarmos isso
viver no mesmo aquário
- 70. A regra é bem simples: para
os nossos peixes, só podem viver
juntos se forem da mesma espécie.
Seria legal verificarmos isso
- 74. public class Peixe {
// ...
public boolean podeViverCom(Peixe outroPeixe) {
return this.especie.equals(outroPeixe.especie);
}
}
- 75. 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!
• Patterns: Entity,Value Object, Repository,
Aggregate, Module, Service
- 76. Domain-Driven Design
• Não detalhei os patterns
• Podia ter usado framework mais decente
• Podia ter usado Inversão de controle
Notas do Editor
- 1 min
- 30 SEG
Tudo comecou em uma bela fazenda muito distante daqui.
START
L&#xE1; moram o Cachorro, o Sapo, o Peixe, bla bla
Um belo dia, o cachorro resolveu abrir um negocio. E para isso, precisava de um sistema.
- 30 seg
E ele veio conversar com a equipe tecnica!
CACHORRO: &#x201C;Ola, eu tive a fantastica ideia de abrir uma loja de peixes. E preciso de um sistema para isso.&#x201D;
- 30 seg
E ele veio conversar com a equipe tecnica!
CACHORRO: &#x201C;Ola, eu tive a fantastica ideia de abrir uma loja de peixes. E preciso de um sistema para isso.&#x201D;
- 30 seg
E ele veio conversar com a equipe tecnica!
CACHORRO: &#x201C;Ola, eu tive a fantastica ideia de abrir uma loja de peixes. E preciso de um sistema para isso.&#x201D;
- 15 seg
- 30 seg
- 30 seg
- 30 seg
- 30 seg
CACHORRO: &#x201C;Temos lambaris, carpas, tambaquis, tilapias e outros cicl&#xED;deos&#x201D;
- 30 seg
CACHORRO: &#x201C;Temos lambaris, carpas, tambaquis, tilapias e outros cicl&#xED;deos&#x201D;
- 30 seg
PROGRAMADOR: &#x201C;Humm, se fizermos a TilapiaVO estender de AbstractCiclideo, acho que d&#xE1;&#x201D;
- 30 seg
PROGRAMADOR: &#x201C;Humm, se fizermos a TilapiaVO estender de AbstractCiclideo, acho que d&#xE1;&#x201D;
- TODO Revisar esse texto
1 min
- TODO Revisar esse texto
1 min
- TODO Revisar esse texto
1 min
- TODO Revisar esse texto
1 min
- - tenho pessoas do dominio e pessoas tecnicas conversando
- elas PRECISAM conversar
- - tenho pessoas do dominio e pessoas tecnicas conversando
- elas PRECISAM conversar
- - Precisam se entender, &#xE9; necessaria uma lingua comum!
-
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
-
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
-
-
-
-
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
-
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
-
-
-
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
- TODO cachorro falando mudo
di&#xE1;logo todo at&#xE9; primeiro model
-
-
-
-
- repository eh domain
DAO eh ORM
-
- citar IoC
&#x201C;e como implemento o repositorio? sei la, isso nao eh domain layer, eh infra&#x201D;
-
- mostrar rodando no browser
falar do struts
-
-
-
-
-
-
- qualquer mudanca no model se reflete no codigo
- qualquer mudanca no codigo tbm se reflete no model!
model e codigo andam juntos, tem que refletir a mesma coisa
-
-
-
-
-