uma introdução ao domain driven design

39
Software complexo? Entenda o seu domínio e desenhe um modelo Abordagem sobre o Desenho Dirigido ao Domínio (Domain-Driven Design ou DDD)

Upload: thiago-holder-marcos-silva

Post on 06-Jun-2015

2.140 views

Category:

Documents


18 download

TRANSCRIPT

Page 1: Uma introdução ao Domain Driven Design

Software complexo? Entenda o seu domínio e desenhe um modeloAbordagem sobre o Desenho Dirigido ao Domínio (Domain-Driven Design ou DDD)

Page 2: Uma introdução ao Domain Driven Design

Quem sou eu?

•Thiago Holder▫Software Developer▫Estudante de Sistemas da Informação

Page 3: Uma introdução ao Domain Driven Design

Objetivo

•Entender a importância de se pensar em um domínio, a linguagem que você usa para falar sobre ele.

Page 4: Uma introdução ao Domain Driven Design

“O desafio da complexidade”

Page 5: Uma introdução ao Domain Driven Design

O que é DDD?

“ É uma maneira de pensar e um conjunto de prioridades, voltado para a aceleração de projetos de softwares com domínios complicados ” Eric Evans.

Page 6: Uma introdução ao Domain Driven Design

O que o DDD apresenta?

Padrões

Boas práticas

Experiência

Page 7: Uma introdução ao Domain Driven Design

Qual o foco do DDD?

Domínio

Regras de negócio complexos

Isolamento entre domínios

Reutilização

Baixo acoplamento

Independente de tecnologia

Page 8: Uma introdução ao Domain Driven Design

Discussão da

solução

Discussão do

problema

Padrões do DDD

Contexto

Resumo do

problemaPor esta Razão

Resumo do

problema

Conseqüência

s,

Implementaçõ

es e exemplo

Contexto resultante

Page 9: Uma introdução ao Domain Driven Design

Partes do DDD

Colocando o modelo de

domínio em ação

Os tijolos de construção

de um design baseado em

modelos

Refatorando para um melhor

entendimento

Design Estratégico

Page 10: Uma introdução ao Domain Driven Design

O que é Domínio?

•Esfera de conhecimento, influência ou atividade.

•A área em que o usuário utiliza o software.

Page 11: Uma introdução ao Domain Driven Design

Modelo?

NãoNão

Page 12: Uma introdução ao Domain Driven Design

Excesso de informação atrapalha

Page 13: Uma introdução ao Domain Driven Design

Modelo

Page 14: Uma introdução ao Domain Driven Design

Os ingredientes de uma modelagem eficaz

Page 15: Uma introdução ao Domain Driven Design

Ligando o modelo e a implementação

Paciente

Consulta

Protótipo rudimentar

**

Page 16: Uma introdução ao Domain Driven Design

Cultivando uma linguagem baseada no modelo

Paciente

Frases consistentes com a estrutura do modelo e ser entendido sem ambigüidade e sem tradução

Consulta A

Consulta B

Consulta C

Agenda()

Agenda()

Agenda()

Page 17: Uma introdução ao Domain Driven Design

Desenvolvendo um modelo rico em conhecimento

Paciente

Captar vários tipos de conhecimento

Médico

Consulta

Agenda

Secretária

Atendido

Verifica Disponibilida

de

Agendamento

Page 18: Uma introdução ao Domain Driven Design

Destilando o modelo

Paciente

Consulta

Agenda MédicaSecretár

iaAtendido Verifica

Agen

da

a co

nsu

lta

MédicoRealiza

Novo modelo que distingue o conceito essencial

Page 19: Uma introdução ao Domain Driven Design

Colhendo idéia

Page 20: Uma introdução ao Domain Driven Design

Linguagem Ubíqua

“ Quer dizer que estar em todos os lugares, ou seja onipresente”.

Page 21: Uma introdução ao Domain Driven Design

Model Driven Design (MDD)

Domínio

Modelo

Design

Desenvolvedores perdidos.Software perdido, dependente de tecnologia.

Guia

Evolui

Refatoração

Page 22: Uma introdução ao Domain Driven Design

Distância no o contexto do domínio

Analista de Negócio

Analista de

SistemasArquiteto

Desenvolvedor

Page 23: Uma introdução ao Domain Driven Design

Tijolos de construção

Page 24: Uma introdução ao Domain Driven Design

Arquitetura em camadas•Camadas dever ter sentido▫“Verifique suas

responsabilidades”

•As camadas tem que ter separação.

Page 25: Uma introdução ao Domain Driven Design

Arquitetura proposta no DDD

Page 26: Uma introdução ao Domain Driven Design

Blocos que compõe o modelo

Modelo

Entidades

Objeto de Valor

FactoriesServiços

Repositórios

Page 27: Uma introdução ao Domain Driven Design

Entidade

Entidade: têm significado no domínio

Entidade: possuem identidades

Page 28: Uma introdução ao Domain Driven Design

Objeto de valor

•não tem identidade para o negócio•São imutaveis•Descrevem coisas, tipos...•Ciclo de vida rápido•Exemplo: cores, especialidade, tipo de dados.

Page 29: Uma introdução ao Domain Driven Design
Page 30: Uma introdução ao Domain Driven Design

Agregados

Entidade

EntidadeObjeto de

valorObjeto de

valor

Page 31: Uma introdução ao Domain Driven Design

Exemplo

<<Raiz>>

Motor

<<Raiz>>

CarroRoda Cliente

Posição Posição

Page 32: Uma introdução ao Domain Driven Design

Algumas regras

Todas as atualizações passam pela

raiz

Sem referências diretas que não sejam a

raiz

Uma exclusão

deve apagar todos os

objetos da agregação

Regras de negócio são garantidas em todo o conjunto

Page 33: Uma introdução ao Domain Driven Design

Fábricas

•Quando a criação de um objeto, ou AGREGADO inteiro, se torna complicada ou revela uma grande parte da estrutura interna, as FÁBRICAS fornecem o encapsulamento

Page 34: Uma introdução ao Domain Driven Design

Interação básica com uma fábrica

Cliente Fábrica Produto

novos(parâmetros) criar

produto

O cliente especifica o que quer

A FÁBRICA faz o objeto que satisfaz o cliente e as regras internas

Page 35: Uma introdução ao Domain Driven Design

Serviços

•Não tem estado próprio•Fica isolado do modelo•Definido como o que ele pode fazer por

um “cliente”•“Verbo em vez de substantivo”•Fala a linguagem ubíqua

Page 36: Uma introdução ao Domain Driven Design

Módulos ou Pacotes

•Os módulos existentes na camada de domínio devem surgir como uma parte significativa do modelo.

Modelos = HistóriasMódulos =

CapítulosMódulos = Capítulos

Módulos = Capítulos

Módulos = Capítulos

Módulos = Capítulos

Módulos = Capítulos

Page 37: Uma introdução ao Domain Driven Design

Repositório EntidadeCódigo Cliente

Repositórios

Agregado

Entidade

Entidade

Agregado

Agregado

Entidade

Busca

Entidade

Cria

Remover

Page 38: Uma introdução ao Domain Driven Design

Linguagem Ubíqua

Design Dirigido

por Modelos

Serviços Objeto

de Valor

Entidades

Módulos

Expressar o modeloNomes entram em

Agregados

Encapsular

Integridade

RepositóriosAc

essa

rFábricas

Encapsula

Arquitetura em

camadas

Isolar o modelo

Page 39: Uma introdução ao Domain Driven Design

ObrigadoE-mail:[email protected]:http//thiagoholder.wordpress.comMsn: thiagoholderSkype: thiagoholder