View
2.887
Download
1
Category
Preview:
DESCRIPTION
Slides utilizados nas turmas do workshop de Domain-Driven Design da Caelum ( http://www.caelum.com.br/curso/ws-46-domain-driven-design/ ) WS-46 | Domain-Driven Design A idéia é cobrir os principais aspectos desta filosofia de design de uma maneira descontraída mas substancial. O que Domain-Driven Design traz de volta é a possibilidade de utilizar as vantagens da Orientação a Objetos para criamos um modelo que reflita o mundo real de maneira mais íntima. Você não precisa sequer de objetos para aplicar o coração de Domain-Driven Design, ou mesmo seus Patterns. Neste contexto, DDD é programar para o domínio. Quando você usa esta técnica, seu software (sua camada de negócios, quase sempre) reflete o conhecimento do domínio do seu usário, você modela os conceitos do problema de uma maneira clara no software. Ao invés de simplesmente criar estruturas de dados e algoritmos, você implementa conceitos e através deles cria um entendimento muito maior sobre o que seu sistema faz para seus usuários, você e para quem for ler seu programa.
Citation preview
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Workshop 2009
Domain-DrivenDesign
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Modelando
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Classeatributo Aoperação B
Classeatributo Aoperação B
Classeatributo Aoperação B
Classeatributo Aoperação B
Notação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Modelando
•Aplicação Web
•Utilizando cartões CRC-like
•Da Interface até a base de dados/infra-estrutura
•Apenas para fins didáticos - não façam isso em casa
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Atendente,Eu quero registrar a entrada em um estacionamento,Para que possa cobrar pelo tempo utilizado
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Atendente,Eu quero registrar a saída do estacionamento,Para que possa cobrar pelo tempo utilizado
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Apresentação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Parte I: Decisões
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Problema:
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Problema:
Como um Usuário,Eu quero me cadastrar no site sistema,Para que possa utilizá-lo
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Reflexão
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Decisão em Três Níveis
Qual? Como?O Quê?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Qual material?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Objetos
FunçõesProcedimentos
Qual material?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como eles colaboram?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como Tabelas?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como Procedimentos?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como Uma Sociedade?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Reflexão
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
O que são estes objetos?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
O que são estes objetos?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Mais Cartões
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Atendente,Eu quero indicar a vaga mais apropriada para meu cliente,Para que possa otimizar a distribuição de carros
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Atendente,Eu quero ver um relógio marcando o tempo que o cliente está estacionado,Para que eu tome decisões rapidamente
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Apresentação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Camadas?
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Mudança
Apresentação
Aplicação
Negócios
Infra-Estrutura
Domain-Driven Design
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Identificando Camadas
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Identificando Camadas
• Separe as classes do modelo em suas respectivas Camadas
• Refatore, se necessário
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Apresentação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Parte II: Linguagem
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A*
B C{
D
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Ruído
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Usuário,Eu quero me cadastrar no site sistema,Para que possa utilizá-lo
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Usuário,Eu quero me cadastrar no site sistema,Para que possa utilizá-lo
Ruído
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Usuário,Eu quero me cadastrar no site sistema,Para que possa utilizá-lo
Ruído Sintático
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Ruído
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Ruído Semântico
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Reflexão
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Ruído Sintático
RuídoSemântico
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Ruído Sintático
RuídoSemântico
Domain-Driven Design}
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Ruído Sintático
RuídoSemântico
Domain-Specific Languages}
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
RuídoSemântico
Domain-Driven Design}
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Técnico Negócios
ClasseObjeto
DAO
Teste Unitário
Patterns
Thread
Segurança
Framework
ComposiçãoHerança
Vaga
Ocupante
Carro
Moto
Imposto
Gerente
Funcionário
Conta
Reserva
Manutenção
Manutenção
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Técnico
Negócios
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Técnico Negócios
Linguagem
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
ObrigadoAté a próxima!
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Identificando Ruído
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Identificando Ruído
• Identifique o que no Modelo faz parte do domínio técnico e de negócios
• Escreva um esboço do que seria a Linguagem deste domínio
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Atendente,Eu quero registrar a entrada em um estacionamento,Para que possa cobrar pelo tempo utilizado
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Atendente,Eu quero registrar a saída do estacionamento,Para que possa cobrar pelo tempo utilizado
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Atendente,Eu quero indicar a vaga mais apropriada para meu cliente,Para que possa otimizar a distribuição de carros
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Atendente,Eu quero ver um relógio marcando o tempo que o cliente está estacionado,Para que eu tome decisões rapidamente
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Apresentação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Parte III: Base
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Nomeando Bovinos
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Objetos com identidade Entity
Objetos definidos por seu valor Value Object
Lugar de onde obtemos objetos Repository
Interações entre objetos em uma dada ordem Service
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Value Object
Saldo A = 100
Saldo B = 10 + 80 + 5 + 5
Saldo C = 90 - 12 + 6 + 6
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Value Object
Data A = 25/12/1983
Data B = Natal de 1983
Data C = 6 dias para 1984
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Conta
Vencimento: 21/02/2008Valor: R$4.000,00Credor: Casas da Banha
Conta
Vencimento: 21/02/2008Valor: R$4.000,00Credor: Casas da Banha
== ?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Entity
Cliente Serviço
Toca Música Recomenda Música
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Entity
Cliente Serviço
Los Hermanos!
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Entity
Cliente Serviço
✓Los Hermanos!
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Entity
Cliente Serviço
✓Los Hermanos!
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Entity
Cliente Serviço
✓Los Hermanos! Los Hermanos?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Entity
Cliente Serviço
✓ ?Los Hermanos! Los Hermanos?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Entity
✓Identidade✓Ciclo de Vida
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Entity
✓IdentidadeChave Primária
Object IDHashcode
Definida pela Linguagem do Domínio
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
ServiceMensagem
Módulo A
Módulo A
Módulo B
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
ServiceMensagem
Módulo A
Módulo A
Módulo B
?
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
ServiceMensagem
Módulo A
Módulo A
Módulo B
Roteador
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Service
✓Parte da Linguagem✓Fluxo de ações sobre outros objetos do domínio✓Sem estado
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Service
92,9245% do que você achar que são Services
não são!
Atenção!
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Repository
(de onde vêm os bebês?)
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Cliente
Repositório
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Cliente
RepositórioCódigo que Acessa o Banco de Dados
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Repository
✓Parte da Linguagem✓Não deixa vazar detalhes de implementação✓Tenha o menor número possível
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Identificando Padrões
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Identificando Padrões
•Marque usando tags os padrões no seu domínio
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Apresentação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Parte IV: Escalando
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Integrando
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Contador,Eu que as transações sejam gerenciadas pelo meu sistema,Para evitar duplicação de dados
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Sistema Contábil
Transação
Envolvido
Credor
Devedor
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Apresentação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A B
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A B C
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A B
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A B
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A B
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A B
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A B
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A B
Mapa
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Desenhando o Mapa
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Desenhando o Mapa
• Estabeleça a relação entre os dois domínios em um diagrama
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Apresentação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Mudanças doLado de Lá
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Sistema Contábil
Transação
Envolvido
Credor
Devedor
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Sistema Contábil
Transação
Envolvido
Credor
Devedor
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Sistema Contábil
Transação
Devedor
Credor
Conta
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Apresentação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
A B
Anti-Corrupção
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Contexts, Map & Anti-Corruption
✓Nomes dos Bounded Contexts são parte da Linguagem✓Mapa precisa ser executável e verificável✓Anti-Corruption Layer não faz parte da Linguagem, deve ser abstraída
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
O que são “Outros Domínios”?
‣“Pedaços” com linguagem diferente‣Sistemas legados‣Bases de dados legadas‣Serviços remotos‣Qualquer “pedaço” que você não controle
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Introduza Anti-Corrupção
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Apresentação
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Conclusão:
Melhore sua comunicação.
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Referências
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Créditos de Fotos
orbitgalbernatcgsykossajanuszbcmdumlao988471692@N07beija-florclarissalondonmummyneilharveyrodrigobertolinoniallkennedyaoneillericeslinger
http://www.flickr.com/photos/
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
http://creativecommons.org/licenses/by-nc-nd/2.5/br/
http://fragmental.tw http://blog.fragmental.com.br http://www.caelum.com.br
Como um Usuário,Eu quero consultar minha conta na Internet,Para que possa pagá-la
Recommended