DDD e Rails

Post on 08-Jan-2017

160 views 0 download

Transcript of DDD e Rails

F r e v o o n R a i l s - a b r i l / 1 6

DDD E RAILSImplementando 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