View
685
Download
0
Category
Preview:
DESCRIPTION
Introdução a DDD - Palestra .NetRaptors 100loop apresentada para unibh
Citation preview
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O que é
Domain-DrivenDesign?
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
É Desenvolver Focado no
Domínio
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
É Desenvolver Focado no
Domínio
WTF?
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Domínio Segundo o Dicionário:
• Esfera de Ação; Competência; Conhecimento.
• O conteúdo de uma área de
conhecimento.
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Domínio é a área de conhecimento do negócio.
Tudo do Software ligado ao negócio faz parte do domínio
Locadora
Locadora
Locadora
Locadora
Locadora
Locadora
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Meu Negócio: Locar Filmes
Fornecedor
Mídias
Filmes
Usuários
Funcionários
Dependentes
Cliente
Locação de Filme
Reserva de Filme
...
Cadastros de Clientes e
Dependentes
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
NÃO faz parte do domínio
Banco de Dados ou Frameworks para os mesmos como o
Nhibernate
Threads
Tratamentos de Excessão
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Principais Vantagens
As tecnologias mudam muito mais rápido do que o negócio
Camadas bem definidas
Responsabilidades claras e bem divididas
Manutenabilidade, Longevidade, Escalabilidade, etc...
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Principais Desvantagens
Mais tempo para desenvolver (porém poupa tempo futuro durante a manutenção e a extensão)
Complexidade! Não é a solução para todos os problemas...
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
Para o entendimento do domínio deve-se gerar um
MODELO do domínio
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
MODELO
WTF? ?
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
Os modelos são abstrações que visam refletir o código
Evans cita em seu livro que o modelo não pode ser "gordo" demais ao ponto de prejudicar a compreensão do domínio.
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
E o código, por sua vez, deve ser usado para detalhar o modelo.
Regras importantes devem estar expostas no modelo, e jamais escondidas no código.
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
O modelo deve ser muito claro!
Deve ser entendido absolutamente da mesma forma por qualquer pessoa, seja ele
o usuário, o desenvolvedor, o arquiteto, o projetista, o designer
a menina do marketing, a tia do café, e até o tester ( sim, ele também tem que ser capaz de entender só de ler )
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
Para que o modelo seja entendido é necessário uma
linguagem ubíqua!
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
Para que o modelo seja entendido é necessário uma
linguagem ubíqua!
WTF?
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
Uma linguagem ubíqua é uma linguagem única falada por todos os
envolvidos no projeto, de forma que a todo momento possa-se conversar sobre o projeto sem ter de ficar traduzindo o que está sendo falado
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
Tudo isso para evitar maus entendidos
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
O Modelo e a Linguagem Ubíqua
O modelo pode ser qualquer coisa, contanto que consiga expressar de forma clara o domínio
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Todo o domínio (implementação) giram em torno
do modelo
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Lets Model
0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Entidades são objetos que têm significado no domínio, possuindo uma
identidade única
Entidades
UsuárioFilme
Funcionário
Mídia
Dependente
Cliente
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Objetos de Valor não tem valor direto ao negócio, e por isto não possuem uma identidade.
Cliente
Nome
CPF
Telefone
EnderecoUsados como estrutura de dados apenas para armazenar valores.
Muito usados para transporte de dados ou
composição de objetos.
Logradouro
Numero
Bairro
etc
etc
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Repositórios são responsáveis por persistir, recuperar e destruir objetos
Fingem possuir todas as entidades na memória, para
quem utiliza não importa onde estão os
dados
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Armários de Caixas
2303
28
18
97
19
64
77 11
42
...
...
... ... ...
Fingem possuir todas as entidades na memória, para
quem utiliza não importa onde estão os
dados
(Sim, foi feito no paint...)
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Serviços na visão do DDD consiste em um objeto que visa resolver
problemas do domínio
Para isto o “service” utiliza Entidades, Objetos de
Valor, Repositórios,
infraestrutura, etc..
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Meu Negócio: Locar Filmes
Locar Filme
Reservar Filme
Cadastrar Cliente
Pesquisar Filme
Etc...
Serviços na visão do DDD consiste em um objeto que visa resolver
problemas do domínio
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas Entidades Objetos de Valor Repositórios Serviços Fabricas
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Muitas vezes criar um novo objeto para atender a um aspecto do
domínio envolve a instanciação de diversas entidades, agregações e composições.
Quando isto se faz necessário não o fazemos dentro do construtor da classe, passamos esta responsabilidade para
uma fábrica.
Outras vezes pode ser necessário decidir entre valores de
inicialização padrão ou mesmo da especialização da classe.
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Neste caso a especialização na construção é prática pois:
• As entidades são mapeadas em diferentes tabelas do banco de dados• As entidades possuem diferentes validadores
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Lets Code
0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 00 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0
Domain-Driven DesignIntrodução ao
@CharlesFortes
.com
pangeanet.org/profile/charlesFortes
Concluindo...
Defina uma linguagem única, expresse o negócio do cliente de forma clara e certifique-se que TODOS falam a mesma língua.
Implemente de forma que o código traduza de forma analítica o que está foi modelado, para que daqui a 20 anos, quando o estagiário for mexer no fonte, ele saiba do que se trata, e se não souber, pode consultar ao productOwner sem problemas.
E lembre-se do princípio de fazer simples, refatorar e melhorar sempre.
Domain-Driven DesignIntrodução ao
@CharlesFortes
pangeanet.org/profile/charlesfortes
br.linkedin.com/in/charlesfortes
Recommended