domain-driven-design

65
Domain Driven Design (DDD) Wende Mendes Higino Email: [email protected]

Upload: wende-mendes

Post on 28-May-2015

1.446 views

Category:

Technology


0 download

DESCRIPTION

Apresentação sobre Domain-Driven-Design

TRANSCRIPT

Page 1: Domain-Driven-Design

Domain Driven Design (DDD)

Wende Mendes Higino

Email: [email protected]

Page 2: Domain-Driven-Design

Objetivo

O que o DDD pode fazer por você

Page 3: Domain-Driven-Design
Page 4: Domain-Driven-Design

Visão de futuroPorque os arquitetos de software devem se preocupar com o DDD ?

Temos que fazer software para durar

Page 5: Domain-Driven-Design

O que é DDD ?

“ É uma abordagem para desenvolvimento de software ”

Page 6: Domain-Driven-Design
Page 7: Domain-Driven-Design
Page 8: Domain-Driven-Design

Qual é o foco do DDD ?

Page 9: Domain-Driven-Design

Banco de dados ?

Page 10: Domain-Driven-Design
Page 11: Domain-Driven-Design

Focado no domínio

Page 12: Domain-Driven-Design

Principais premissas do (DDD)

“ Para a maioria dos projetos de software o foco

principal deve ser no domínio e na lógica do

domínio ”

“ Desenhos complexos de domínio devem ser

baseados em modelos ”

Page 13: Domain-Driven-Design

Domínio ?

Page 14: Domain-Driven-Design

Domínio:

- Área de conhecimento do software

Exemplo: domínio do software de uma farmácia: - controle de preço, estoque, etc.

Page 15: Domain-Driven-Design

Modelo ?

Page 16: Domain-Driven-Design

O mundo

Page 17: Domain-Driven-Design

O mundo

Não precisa ser impecavelmente realista

Page 18: Domain-Driven-Design

- Modelo são baseados em abstrações.

- É uma idéia e deixa um monte de detalhes de fora.

Modelos ?

Page 19: Domain-Driven-Design

O mundo

Excesso de informações atrapalha

Page 20: Domain-Driven-Design

Brasil

Page 21: Domain-Driven-Design

São Paulo

Page 22: Domain-Driven-Design

BlueSoft

Page 23: Domain-Driven-Design

BlueSoft

Usado para resolver problemas

Page 24: Domain-Driven-Design

Recapitulando:

* Modelos são abstrações

- O que não interessa fica de fora

- O modelo deve refletir no código ou são irrelevantes

- O modelo deve representar o seu domínio

Page 25: Domain-Driven-Design

Não há padrão para um modelo

Page 26: Domain-Driven-Design

Pode ser assim:

Page 27: Domain-Driven-Design

Ou assim:

Page 28: Domain-Driven-Design

Compõe o modelo...

Page 29: Domain-Driven-Design

Ubiquitous Language:

- Vem dos business experts

- É refletida no modelo

- É refletida no código

- É falada pelo time

Page 30: Domain-Driven-Design

Não

- Tabela

- Classe

- método

- String

- Banco de dados

Sim

- Carga

- Conta corrente

- Agendamento de horários

- Deposito bancário

- Realizar matricula

Page 31: Domain-Driven-Design

Ouça business experts

É ele que entende do negócio.

É ele que conhece o problema, não você

Page 32: Domain-Driven-Design

Distância dos desenvolvedores e o contexto do domínio

Page 33: Domain-Driven-Design

- Camadas devem fazer sentido.“ verifique suas responsabilidades ”

- As camadas tem que ter separação

Page 34: Domain-Driven-Design

Camadas do DDD

Page 35: Domain-Driven-Design

"Esta camada é o coração de um software de negócio”

(Eric Evans)

Page 36: Domain-Driven-Design

Conceitos do DDD

Page 37: Domain-Driven-Design

Entidade: São objetos que tem significado no domínio

Entidade: possuem identidades

Page 38: Domain-Driven-Design

- Objetos de valor não tem identidade para o negócio

- São reconhecidos por seus atributos

- Geralmente são imutáveis

Azul

Verde

Vermelho

Exemplo:

Objetos de Valor

Page 39: Domain-Driven-Design

- Reúnem entidades e objetos de valor de maneira que faça sentido para o negócio

- Toda agregação tem uma raiz

Agregações

Page 40: Domain-Driven-Design
Page 41: Domain-Driven-Design

Algumas regras:

Page 42: Domain-Driven-Design

Serviços

- Serviços resolvem problemas de negócio, mas não são entidades e nem objetos de valor

- Se meu serviço precisar retornar algum objeto, este objeto tem que estar no meu domínio

Page 43: Domain-Driven-Design

Serviços

Exemplo :

Page 44: Domain-Driven-Design

Factories

- Criam objetos

- Objetos devem ser criados consistentes

Page 45: Domain-Driven-Design

Factories

Exemplo :

Page 46: Domain-Driven-Design

Repositórios

- Responsáveis por persistir e destruir os objetos

- Responsáveis por guardar e recuperar objetos

- Falar a língua do negócio

* Vai ter métodos:- obter por data

- obter por cpf- obter por vencimento

Page 47: Domain-Driven-Design

Exemplo de um projeto

Page 48: Domain-Driven-Design

Exemplo de um projeto

Page 49: Domain-Driven-Design

Camadas do domínio

Page 50: Domain-Driven-Design

Camadas do domínio

Page 51: Domain-Driven-Design

Camadas do domínio

Page 52: Domain-Driven-Design

Ciclo de vida de um objeto para o DDD:

- Factories criam objetos

Page 53: Domain-Driven-Design

Ciclo de vida de um objeto para o DDD:

- Factories criam objetos

- Repositórios recuperam objetos

Page 54: Domain-Driven-Design

Ciclo de vida de um objeto para o DDD:

- Factories criam objetos

- Repositórios recuperam objetos

- Repositórios alteram objetos

Page 55: Domain-Driven-Design

Ciclo de vida de um objeto para o DDD:

- Factories criam objetos

- Repositórios recuperam objetos

- Repositórios alteram objetos

- Repositórios destroem objetos

Page 56: Domain-Driven-Design

Ciclo de vida:

- Factories criam objetos

- Repositórios recuperam objetos

- Repositórios alteram objetos

- Repositórios destroem objetos

Page 57: Domain-Driven-Design

Funciona assim ?

Page 58: Domain-Driven-Design

Funciona assim ?

Page 59: Domain-Driven-Design

Feedback é fundamental.

O tempo todo !

Page 60: Domain-Driven-Design

Recomendação

Page 61: Domain-Driven-Design

- O DDD aceita mudanças

- Não brigue com elas

Page 62: Domain-Driven-Design

Recomendações:

“ O foco são os projetos com regras de negócio complexas ”

“ Quando as empresas fam que o projeto é simples, comece a tomar cuidado, pois eles crescem ”

“ Comece com projetos pequenos para aprender ”

Page 63: Domain-Driven-Design

Obrigado

Page 64: Domain-Driven-Design

Bibliografia

Page 65: Domain-Driven-Design