DDD - Linguagem Ubíqua

40
@bregaida [email protected]

description

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

Transcript of DDD - Linguagem Ubíqua

Page 2: DDD - Linguagem Ubíqua

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...

Page 3: DDD - Linguagem Ubíqua

E aí Bregaida, beleza?!Estou precisando de um

sistema para minha loja de aeronaves.

Page 4: DDD - Linguagem Ubíqua

Domain-Driven Design

Page 5: DDD - Linguagem Ubíqua

Domain-Driven Design

Page 6: DDD - Linguagem Ubíqua

Teremos Tupis, Cherokees, Aeroboeiros,

Paulistinhas e outras aeronaves, com diferentes capacidades e potências.!

Page 7: DDD - Linguagem Ubíqua

?

Page 8: DDD - Linguagem Ubíqua

Hum...!Então se eu fizer

CapacidadeTO estender de AbstractAeronave, acho

que vai dar certo!

Page 9: DDD - Linguagem Ubíqua

?

Page 10: DDD - Linguagem Ubíqua

Domain

Negócio Complexo

Problema Real

Pessoas

Linguagem de Negócio

Page 11: DDD - Linguagem Ubíqua

ConversaSobre o domínio

Para criar um sistema

Page 12: DDD - Linguagem Ubíqua

ConversaSobre o domínio

Para criar um sistema

Precisamos falar a mesma língua!

Page 13: DDD - Linguagem Ubíqua

Língua Ubíqua (Ubiquitous Language)

Page 14: DDD - Linguagem Ubíqua

Temos hangares aqui no nosso espaço, com

vários aviões diferentes...

Page 15: DDD - Linguagem Ubíqua

Nosso cliente chegará no Hangar e usará o sistema para encontrar os melhores

aviões para sua necessidade.

Page 16: DDD - Linguagem Ubíqua

Por exemplo, temos aviões de diferentes cores

e capacidades.

Page 17: DDD - Linguagem Ubíqua

O cliente normalmente também

pode escolher pela empresa fabricante

(Embraer, Piper, Aviat, etc)

Page 18: DDD - Linguagem Ubíqua

Aviao !

-Cor -Capacidade - Fabricante

Cor !

-Nome

Capacidade !

(Potência, Quantidade Passageiros)

Fabricante !

(Piper, Embraer, Aviate, Boeing, etc)

Page 19: DDD - Linguagem Ubíqua

Isso mesmo e nossos aviões possuem um nome

e um prefixo que é sua identificação no Brasil.

Page 20: DDD - Linguagem Ubíqua

Aviao !

-id -Nome -Cor

-Capacidade - Fabricante

Cor !

-Nome

Capacidade !

(Potência, Quantidade Passageiros)

Fabricante !

(Piper, Embraer, Aviate, Boeing, etc)

Page 21: DDD - Linguagem Ubíqua

Exatamente, mas nosso cliente vai mesmo

querer pesquisar por Fabricante e nome da

aeronave.

Page 22: DDD - Linguagem Ubíqua

Aviao !

-Prefixo -Nome -Cor

-Capacidade - Fabricante

Cor !

-Nome

Capacidade !

(Potência, Quantidade Passageiros)

Fabricante !

(Piper, Embraer, Aviate, Boeing, etc)

Repositório de aviões

buscarPorNome buscarPorFabricante

Page 23: DDD - Linguagem Ubíqua

Aliás outra busca que quero é dado um avião quero saber quais os aviões com mesma

potência.

Page 24: DDD - Linguagem Ubíqua

Creio que com esse nosso repositório fica mais

fácil de saber, né?

Page 25: DDD - Linguagem Ubíqua

Aviao !

-Prefixo -Nome -Cor

-Capacidade - Fabricante

-AviõesComMesmaPotência

Cor !

-Nome

Capacidade !

(Potência, Quantidade Passageiros)

Fabricante !

(Piper, Embraer, Aviate, Boeing, etc)

Repositório de aviões

buscarPorNome buscarPorFabricante

Page 26: DDD - Linguagem Ubíqua
Page 27: DDD - Linguagem Ubíqua

public class Aviao {! private Long id; private String nome; ! private Fabricante fabricante; private Cor cor; private Capacidade capacidade;!}

!

Page 28: DDD - Linguagem Ubíqua

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}

Page 29: DDD - Linguagem Ubíqua

Repositório... BD? DAO? !

O que nosso cliente quer?

Page 30: DDD - Linguagem Ubíqua

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);!}

Page 31: DDD - Linguagem Ubíqua

Como implementar o Repositório?

Page 32: DDD - Linguagem Ubíqua
Page 33: DDD - Linguagem Ubíqua
Page 34: DDD - Linguagem Ubíqua

Poxa é isso mesmo que eu queria, está ficando

muito bom, porém esqueci que quero hangarar juntas

as aeronaves com a mesma potência.!

Page 35: DDD - Linguagem Ubíqua

Model

Código

Page 36: DDD - Linguagem Ubíqua

Model

Código

Page 37: DDD - Linguagem Ubíqua

public class Aviao { //Códigos anteriores... public boolean possuemMesmaPotencia(Aviao outroAviao){ return this.capacidade.getPotencia().equals(outroAviao.getPotencia());!}

!

Page 38: DDD - Linguagem Ubíqua

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!

Page 39: DDD - Linguagem Ubíqua

Não importa a tecnologia. O que importa é o domain.

Page 40: DDD - Linguagem Ubíqua

[email protected] http://javawora.blogspot.com

http://www.slideshare.net/eduardo.bregaida @bregaida

Obrigado!