DDD e Rails

30
Frevo on Rails - abril/16 DDD E RAILS Implementando Domain-driven Design com Rails: Um caso de sucesso. Marcelo Theodoro

Transcript of DDD e Rails

Page 1: 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

Page 2: DDD e Rails

AGENDA

▫︎O domínio do Capcom

▫︎O problema em utilizar frameworks

▫︎Domain-driven Design

▫︎Desafios que encontramos

2

Page 3: DDD e Rails

O DOMÍNIO DO CAPCOM

3

Page 4: DDD e Rails

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

Page 5: DDD e Rails

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.

Page 6: DDD e Rails

QUE AÇÕES O DOMÍNIO DE AMORTIZAÇÕES FAZ?

6

Qual parece mais adequado?

Page 7: DDD e Rails

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

Page 8: DDD e Rails

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

Page 9: DDD e Rails

DOMAIN-DRIVEN DESIGN

9

Page 10: DDD e Rails

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.

Page 11: DDD e Rails

11

Separe o sistema em camadas, mantendo a coesão e criando

dependência somente com as camadas inferiores

Page 12: DDD e Rails

ARQUITETURA EM CEBOLA

12

Page 13: DDD e Rails

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

Page 14: DDD e Rails

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

Page 15: DDD e Rails

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

Page 16: DDD e Rails

AGREGAÇÕES

16

Page 17: DDD e Rails

FACTORIES

Responsável por criar instâncias de objetos complexos ou agregações

17

Page 18: DDD e Rails

REPOSITÓRIOS

Responsável por buscar informações de dependências externas ao domínio

Banco de dados, APIs, Arquivos, Sockets…

18

Page 19: DDD e Rails

REPOSITÓRIOS

19

Page 20: DDD e Rails

SERVIÇOS

Encapsula operações ou processos de negócio

20

Page 21: DDD e Rails

BOUNDED CONTEXT

Subsistemas/subdomínios que representam contextos específicos e bem definidos.

21

Fonte: http://martinfowler.com/bliki/BoundedContext.html

Page 22: DDD e Rails

BOUNDED CONTEXT

22

Page 23: DDD e Rails

BOUNDED CONTEXT

23

Page 24: DDD e Rails

DESAFIOS

Separar as entidades de domínio dos Rails Models: Repositórios e Adaptadores

24

Page 25: DDD e Rails

DESAFIOS

25

Page 26: DDD e Rails

BOUNDED CONTEXT

26

Organizar o código dentro de um bounded context? Por comportamentos.

Page 27: DDD e Rails

DESAFIOS

Criar visões que tocam várias partes do domínio: Views

27

Page 28: DDD e Rails

DESAFIOS

28

Page 29: DDD e Rails

DESAFIOS

Refatorações para manter o codebase coerente com o conhecimento do domínio

Ater-se as disciplinas do DDD

29

Page 30: DDD e Rails

Perguntas?

Marcelo Theodoro [email protected]

MUITO OBRIGADO