SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
F r e v o o n R a i l s - a b r i l / 1 6
DDD E RAILS
Implementando Domain-driven Design com Rails:
Um caso de sucesso.
Marcelo Theodoro
AGENDA
▫︎O domínio do Capcom
▫︎O problema em utilizar frameworks
▫︎Domain-driven Design
▫︎Desafios que encontramos
2
O DOMÍNIO DO CAPCOM
3
4
Frameworks tem sua própria agenda e
suas próprias prioridades. Ao vincular
sua aplicação a um framework, você
está sujeito às mudanças do
framework.
Uncle Bob
5
O código de um sistema deve ser uma
representação fiel do domínio. Se o seu
código está dentro do Rails (ou de
qualquer MVC), ele não está
representando o domínio.
QUE AÇÕES O DOMÍNIO DE AMORTIZAÇÕES FAZ?
6
Qual parece mais adequado?
DOMAIN-DRIVEN DESIGN
Uma abordagem para desenvolvimento de
softwares complexos
Reune um conjunto de boas práticas, padrões de projeto, conceitos de SOLID e
introduz uma linguagem ubíqua.
Domínio é uma área de conhecimento do negócio onde o software está
inserido.
Uma linguagem comum entre negócio e
desenvolvimento
■ Todas as pessoas dentro de um time falando a mesma língua
■ Sem tradução: ”o que o cliente chama de custo é o campo valor”
7
DDD - ABORDAGEM
Foco no domínio principal
Explore os modelos em conjunto com
desenvolvedores e especialistas de domínio
Converse em uma linguagem comum dentro
de um contexto específico
8
DOMAIN-DRIVEN DESIGN
9
10
Expresse o domínio e a lógica de
negócio, eliminando a dependência
com a UI, infra-estrutura e código não
relacionado ao domínio.
11
Separe o sistema em camadas,
mantendo a coesão e criando
dependência somente com as camadas
inferiores
ARQUITETURA EM CEBOLA
12
ENTIDADES
Um objeto distinto pela sua identidade
■ Um produto em uma loja
■ Uma nota fiscal na contabilidade
■ Uma pessoa para o governo
- E por aí vai…
13
OBJETOS DE VALOR
Um objeto cuja identidade não importa
Só tem importância pelos seus atributos ou por sua lógica
É um objeto imutável
■ Uma cor
■ Uma descrição
■ Uma data ou hora
■ Um endereço
- E por aí vai…
14
AGREGAÇÕES
Uma combinação entre entidades e seus
relacionamentos com objetos de valor
dentro de um contexto
Uma agregação é tratada como uma única unidade.
Só é acessada pela sua raíz, uma entidade.
■ Pedido (itens, local de entrega, cliente, cupom de desconto)
■ Chamado/Atendimento (atendente, hora, local, comentários, tags)
- E por aí vai
15
AGREGAÇÕES
16
FACTORIES
Responsável por
criar instâncias
de objetos
complexos ou
agregações
17
REPOSITÓRIOS
Responsável por buscar informações de
dependências externas ao domínio
Banco de dados, APIs, Arquivos, Sockets…
18
REPOSITÓRIOS
19
SERVIÇOS
Encapsula
operações ou
processos de
negócio
20
BOUNDED CONTEXT
Subsistemas/subdomínios que representam
contextos específicos e bem definidos.
21
Fonte: http://martinfowler.com/bliki/BoundedContext.html
BOUNDED CONTEXT
22
BOUNDED CONTEXT
23
DESAFIOS
Separar as entidades de domínio dos Rails
Models: Repositórios e Adaptadores
24
DESAFIOS
25
BOUNDED CONTEXT
26
Organizar o código dentro de um bounded
context? Por comportamentos.
DESAFIOS
Criar visões que tocam várias partes do
domínio: Views
27
DESAFIOS
28
DESAFIOS
Refatorações para manter o codebase
coerente com o conhecimento do domínio
Ater-se as disciplinas do DDD
29
Perguntas?
Marcelo Theodoro
marcelo.theodorojr@gmail.com
MUITO OBRIGADO

Mais conteúdo relacionado

Semelhante a DDD e Rails

Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-DesignWende Mendes
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Introducao a Clean Architecture
Introducao a Clean ArchitectureIntroducao a Clean Architecture
Introducao a Clean ArchitectureRafael Capuano
 
Uma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignUma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignLambda3
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com PythonFrederico Cabral
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaGraziella Bonizi
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignÍtalo Bandeira
 
Drupal Commerce: muito além de uma plataforma de e-commerce
Drupal Commerce: muito além de uma plataforma de e-commerceDrupal Commerce: muito além de uma plataforma de e-commerce
Drupal Commerce: muito além de uma plataforma de e-commercePedro Rocha
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!Mario Guedes
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven DesignRafael Ponte
 
Relação do Dynamics CRM com a Microsoft Cloud
Relação do Dynamics CRM com a Microsoft CloudRelação do Dynamics CRM com a Microsoft Cloud
Relação do Dynamics CRM com a Microsoft CloudPedro Azevedo
 
Distribuições Drupal: de e-Gov a e-Learning
Distribuições Drupal: de e-Gov a e-LearningDistribuições Drupal: de e-Gov a e-Learning
Distribuições Drupal: de e-Gov a e-LearningPedro Rocha
 
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresDrupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresPedro Rocha
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 

Semelhante a DDD e Rails (20)

Domain-Driven-Design
 Domain-Driven-Design Domain-Driven-Design
Domain-Driven-Design
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
DDD
DDDDDD
DDD
 
Introducao a Clean Architecture
Introducao a Clean ArchitectureIntroducao a Clean Architecture
Introducao a Clean Architecture
 
Uma introdução ao Domain Driven Design
Uma introdução ao Domain Driven DesignUma introdução ao Domain Driven Design
Uma introdução ao Domain Driven Design
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Domain driven-design
Domain driven-designDomain driven-design
Domain driven-design
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
Drupal Commerce: muito além de uma plataforma de e-commerce
Drupal Commerce: muito além de uma plataforma de e-commerceDrupal Commerce: muito além de uma plataforma de e-commerce
Drupal Commerce: muito além de uma plataforma de e-commerce
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 
Introdução a Domain-Driven Design
Introdução a Domain-Driven DesignIntrodução a Domain-Driven Design
Introdução a Domain-Driven Design
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
Relação do Dynamics CRM com a Microsoft Cloud
Relação do Dynamics CRM com a Microsoft CloudRelação do Dynamics CRM com a Microsoft Cloud
Relação do Dynamics CRM com a Microsoft Cloud
 
Distribuições Drupal: de e-Gov a e-Learning
Distribuições Drupal: de e-Gov a e-LearningDistribuições Drupal: de e-Gov a e-Learning
Distribuições Drupal: de e-Gov a e-Learning
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresDrupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
 
Corbawebserves
CorbawebservesCorbawebserves
Corbawebserves
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 

DDD e Rails