node.js com domain driven design modelando sua aplicação · domain driven design: tackling...

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

Upload: others

Post on 26-Jun-2020

27 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

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

Page 2: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

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?

Page 3: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Pai coruja / zumbi

Quem sou?

Page 4: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Desenvolvendo software no dia-a-dia

Page 5: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Mundo Real Software

Page 6: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Nas primeiras tentativas de mapear essa realidade...

Page 7: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Funciona !!!

Page 8: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

#sqn

Page 9: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

O problema / expectativa

Page 10: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Alinhamento de informações

Page 11: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

O que esperamos

Page 12: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

O que acontece

Page 13: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

O que realmente acontece

Page 14: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Domain Driven Design

Page 15: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Domain Driven Design

área de interesse onde o software

será desenvolvido

Page 16: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Domain Driven Design

área de interesse onde o software

será desenvolvido o "como" estruturamos as partes internas

do software para refletir o domínio

Page 17: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Como pensar o software?

Código

Arquitetura

Design

Page 18: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Onde iremos nos focar

Código

Design

Page 19: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Em que estrutura?

Page 20: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

O que esperamos

Page 21: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Começando a modelar

Page 22: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

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!

Page 23: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Modelo Projeto

Negócio Desenvolvedor

Linguagemúbiqua

Domínio

Page 24: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Ao problema !!!

Page 25: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Mas primeiro...

Page 26: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

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

Page 27: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

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

Primeira descrição de domínio

Page 28: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design
Page 29: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

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

Papéis

Page 30: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

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

Ações

Page 31: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

ligado com

para conseguir

Page 32: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design
Page 33: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

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

Round 2

Page 34: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design
Page 35: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

"O endereço deve ser usado no GPS para conseguir calcular a rota"

Round 3, a.k.a. o que é o coiso?

Page 36: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design
Page 37: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Ok… mas e a estrutura do código?

Page 38: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

DDD Tático: Building blocks

Page 39: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Aplicação de exemplo (estrutura)

Adap

ter

Adap

ter

Infraestrutura

Domínio

GraphQL

Adapter

Page 40: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

DDD Tático: Building blocks

Page 41: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Building blocks

Entidades

Objetos de Valor

Serviços

Agregados

Factories

Repositórios

Page 42: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Building blocks "mais comuns"

Entidades

Objetos de Valor

Serviços

Repositórios

Page 43: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

● 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

Page 44: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

"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

Page 45: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Entidades

Page 46: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Objetos de valor

Page 47: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

● 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

Page 48: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Serviços e Repositórios

Page 49: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Coding...

Page 50: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

● 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...

Page 51: Node.js com Domain Driven Design Modelando sua aplicação · Domain Driven Design: Tackling Complexity in the Heart of Software Implementing Domain-Driven Design Domain-Driven Design

Obrigado!

https://github.com/danielbdias

https://speakerdeck.com/danielbdias

https://twitter.com/danielbdiashttps://github.com/danielbdias/domain-driven-design-in-nodejs