Slide 1

Slide 1 text

Modelando sua aplicação Node.js com Domain Driven Design

Slide 2

Slide 2 text

Engenheiro de Software na Resultados Digitais Mestre em Ciência da Computação (foco em IA) pela USP Artista marcial há mais de 10 anos Quem sou?

Slide 3

Slide 3 text

Pai coruja / zumbi Quem sou?

Slide 4

Slide 4 text

Desenvolvendo software no dia-a-dia

Slide 5

Slide 5 text

Mundo Real Software

Slide 6

Slide 6 text

Nas primeiras tentativas de mapear essa realidade...

Slide 7

Slide 7 text

Funciona !!!

Slide 8

Slide 8 text

#sqn

Slide 9

Slide 9 text

O problema / expectativa

Slide 10

Slide 10 text

Alinhamento de informações

Slide 11

Slide 11 text

O que esperamos

Slide 12

Slide 12 text

O que acontece

Slide 13

Slide 13 text

O que realmente acontece

Slide 14

Slide 14 text

Domain Driven Design

Slide 15

Slide 15 text

Domain Driven Design área de interesse onde o software será desenvolvido

Slide 16

Slide 16 text

Domain Driven Design área de interesse onde o software será desenvolvido o "como" estruturamos as partes internas do software para refletir o domínio

Slide 17

Slide 17 text

Como pensar o software? Código Arquitetura Design

Slide 18

Slide 18 text

Onde iremos nos focar Código Design

Slide 19

Slide 19 text

Em que estrutura?

Slide 20

Slide 20 text

O que esperamos

Slide 21

Slide 21 text

Começando a modelar

Slide 22

Slide 22 text

Linguagem úbiqua ● Linguagem (termos, ações, papéis) que "permeia" todo o software e o seu processo de construção ● Deve ser refletida e evoluir com o código!

Slide 23

Slide 23 text

Modelo Projeto Negócio Desenvolvedor Linguagem úbiqua Domínio

Slide 24

Slide 24 text

Ao problema !!!

Slide 25

Slide 25 text

Mas primeiro...

Slide 26

Slide 26 text

Não existe bala de prata !!!!!!!!!!!

Slide 27

Slide 27 text

"O coiso deve ser ligado junto com o treco para conseguir a outra coisa" Primeira descrição de domínio

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

"O coiso deve ser ligado junto com o treco para conseguir a outra coisa" Papéis

Slide 30

Slide 30 text

"O coiso deve ser ligado junto com o treco para conseguir a outra coisa" Ações

Slide 31

Slide 31 text

ligado com para conseguir

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

"O coiso deve ser usado no GPS para conseguir calcular a rota" Round 2

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

"O endereço deve ser usado no GPS para conseguir calcular a rota" Round 3, a.k.a. o que é o coiso?

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

Ok… mas e a estrutura do código?

Slide 38

Slide 38 text

DDD Tático: Building blocks

Slide 39

Slide 39 text

Aplicação de exemplo (estrutura) Adapter Adapter Infraestrutura Domínio GraphQL Adapter

Slide 40

Slide 40 text

DDD Tático: Building blocks

Slide 41

Slide 41 text

Building blocks Entidades Objetos de Valor Serviços Agregados Factories Repositórios

Slide 42

Slide 42 text

Building blocks "mais comuns" Entidades Objetos de Valor Serviços Repositórios

Slide 43

Slide 43 text

● Entidades: objeto com uma série de atributos definidos por uma identidade e linha de continuidade ● Objeto de valor: objeto com uma série de atributos, sem identidade e imutável Building blocks

Slide 44

Slide 44 text

"Um endereço é único no sistema e deve ter um logradouro, número, CEP, cidade e tipo (residência ou trabalho)" "Uma rota é um conjunto de instruções ordenadas, que descrevem a direção a seguir para o destino" Entidades X Objetos de Valor

Slide 45

Slide 45 text

Entidades

Slide 46

Slide 46 text

Objetos de valor

Slide 47

Slide 47 text

● Serviços: comportamentos do domínio que não se enquadram em entidades e em objetos de valor, não possuem estado ● Repositórios: serviço responsável por gerenciar o ciclo de vida das entidades / agregados na aplicação, persistir os dados de uma entidade / agregado em um mecanismo de armazenamento (banco de dados, arquivo, etc) Building blocks

Slide 48

Slide 48 text

Serviços e Repositórios

Slide 49

Slide 49 text

Coding...

Slide 50

Slide 50 text

● Livros: ○ Domain Driven Design: Tackling Complexity in the Heart of Software ○ Implementing Domain-Driven Design ○ Domain-Driven Design Distilled ○ Clean Architecture: A Craftsman's Guide to Software Structure and Design ● Talks: ○ GOTO 2017 • DDD Today - Modeling Uncertainty • Vaughn Vernon ○ Eric Evans - Keynote: DDD Isn't Done: A Skeptical, Optimistic , Pragmatic Look Para saber mais...

Slide 51

Slide 51 text

Obrigado! https://github.com/danielbdias https://speakerdeck.com/danielbdias https://twitter.com/danielbdias https://github.com/danielbdias/domain-driven-design-in-nodejs