Slide 1

Slide 1 text

Domain-Driven Design uma introdução para desenvolvedores, artistas, responsáveis ou degustadores de café com leite blog.eriksen.com.br/palestras

Slide 2

Slide 2 text

“Software está comendo o mundo” – Marc Andreessen “Software está comendo o mundo” – Marc Andreessen

Slide 3

Slide 3 text

Muitos projetos Ágeis estão Produzindo código ruim – Sandro Mancuso Muitos projetos Ágeis estão Produzindo código ruim – Sandro Mancuso “ “ ” ”

Slide 4

Slide 4 text

Questionamentos se design é necessário ou Acessível Perdem o ponto: design é inevitável. A alternativa para Bom design é design ruim, e não a ausência de design. – Douglas Martin Questionamentos se design é necessário ou Acessível Perdem o ponto: design é inevitável. A alternativa para Bom design é design ruim, e não a ausência de design. – Douglas Martin “ “ ” ”

Slide 5

Slide 5 text

Uma Grande Bola de Lama é uma selva de código Mal estruturado, desleixado, espaguete e todo Remendado com fita adesiva – Brian Foote & Joseph Yoder Uma Grande Bola de Lama é uma selva de código Mal estruturado, desleixado, espaguete e todo Remendado com fita adesiva – Brian Foote & Joseph Yoder “ “ ” ”

Slide 6

Slide 6 text

Domain-Driven design

Slide 7

Slide 7 text

É um enigma. As pessoas que são especialistas no Domínio – os especialistas de domínio – raramente Estão qualificadas para escrever software. As pessoas que estão qualificadas para escrever Software – os programadores – nem sempre Entendem O domínio-problema. – James Shore É um enigma. As pessoas que são especialistas no Domínio – os especialistas de domínio – raramente Estão qualificadas para escrever software. As pessoas que estão qualificadas para escrever Software – os programadores – nem sempre Entendem O domínio-problema. – James Shore “ “ ” ”

Slide 8

Slide 8 text

se os programadores não estão interessados no domínio, eles aprendem apenas o que a aplicação deve fazer, não os princípios por trás dela. Software útil pode ser desenvolvido dessa Maneira, Mas o projeto nunca chegará em um ponto onde novas Funcionalidades poderosas surgirão como desdobramento de funcionalidades existentes. – Eric Evans se os programadores não estão interessados no domínio, eles aprendem apenas o que a aplicação deve fazer, não os princípios por trás dela. Software útil pode ser desenvolvido dessa Maneira, Mas o projeto nunca chegará em um ponto onde novas Funcionalidades poderosas surgirão como desdobramento de funcionalidades existentes. – Eric Evans “ “ ” ”

Slide 9

Slide 9 text

Domínio

Slide 10

Slide 10 text

Domínio Core Domain

Slide 11

Slide 11 text

Domínio Core Domain Modelo

Slide 12

Slide 12 text

Domínio Core Domain Modelo

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

Design Estratégico é como fazer o rascunho antes De Entrar nos detalhes da implementação. Destaca O que é estrategicamente importante para o seu Negócio, como dividir o trabalho por importância E como fazer integrações da melhor maneira. – Vaughn Vernon Design Estratégico é como fazer o rascunho antes De Entrar nos detalhes da implementação. Destaca O que é estrategicamente importante para o seu Negócio, como dividir o trabalho por importância E como fazer integrações da melhor maneira. – Vaughn Vernon “ “ ” ”

Slide 17

Slide 17 text

DDD é primariamente sobre modelar Uma Linguagem Ubíqua em Um Contexto Delimitado – Vaughn Vernon DDD é primariamente sobre modelar Uma Linguagem Ubíqua em Um Contexto Delimitado – Vaughn Vernon ” ” “ “

Slide 18

Slide 18 text

Contexto Delimitado (Bounded Context)

Slide 19

Slide 19 text

Contexto Delimitado (Bounded Context) Linguagem Ubíqua (Ubiquitous Language)

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Linguagem Ubíqua (Ubiquitous Language) modelamos isso dentro média Contexto SP Contexto Delimitado (Bounded Context)

Slide 22

Slide 22 text

= + + Contexto Time Banco de dados Repositório

Slide 23

Slide 23 text

Itinerário Veículo Perna Comprovante Motorista Destinatário Entrega Contexto Transporte (Core Domain)

Slide 24

Slide 24 text

Rota Veículo Carga Nó Contexto Roteirização (Genérico)

Slide 25

Slide 25 text

Contexto Agendamento (Suporte) Conta Entrega Nota Fiscal Comprovante

Slide 26

Slide 26 text

Contexto Identificação (Genérico) Conta Usuário Permissão

Slide 27

Slide 27 text

Contexto Monitoramento (Suporte) Veículo Remessa Motorista

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Parceria

Slide 32

Slide 32 text

Cliente-fornecedor Downstream (cliente) Upstream (fornecedor)

Slide 33

Slide 33 text

Camada Anti-corrupção (Anticorruption Layer)

Slide 34

Slide 34 text

Conformista

Slide 35

Slide 35 text

D u D u Contexto Transporte (Core Domain) Roteirização (Genérico) Agendamento (Suporte) Identificação (Genérico) Monitoramento (Suporte)

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Software funcionando é a medida primária de progresso – Princípio 7 do Manifesto Ágil Software funcionando é a medida primária de progresso – Princípio 7 do Manifesto Ágil ” ” “ “

Slide 39

Slide 39 text

No DDD há esse princípio de que o Software deve refletir o modelo explicitamentE – Eric Evans No DDD há esse princípio de que o Software deve refletir o modelo explicitamentE – Eric Evans ” ” “ “

Slide 40

Slide 40 text

package br.com.ligeirinho.transporte package dominio.modelo @EntidadeRaiz class Itinerario( val id: ItinerarioId, private val veiculo: Veiculo, private val pernas: List[Perna] ) extends Entidade { // ... def transferirEntregasPendentes(outroItinerario: Itinerario): Unit = { } def alocarMotorista(motorista: Motorista): Unit = { } def realocarParaMotorista(motorista: Motorista): Unit = { } // ... }

Slide 41

Slide 41 text

microserviços são serviços pequenos E autônomos que trabalham em conjunto – Sam Newman microserviços são serviços pequenos E autônomos que trabalham em conjunto – Sam Newman ” ” “ “

Slide 42

Slide 42 text

Se os limites dos nossos serviços alinhaM-se Aos Contextos Delimitados do nosso domínio, Nós começamos bem para garantir que nossos Microserviços estão com baixo acoplamento E alta coesão – Sam Newman Se os limites dos nossos serviços alinhaM-se Aos Contextos Delimitados do nosso domínio, Nós começamos bem para garantir que nossos Microserviços estão com baixo acoplamento E alta coesão – Sam Newman ” ” “ “

Slide 43

Slide 43 text

= + + Contexto Time Banco de dados Repositório

Slide 44

Slide 44 text

Como começar?

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

A arte nunca está terminada, é apenas abandonada – Leonardo da Vinci A arte nunca está terminada, é apenas abandonada – Leonardo da Vinci ” ” “ “

Slide 47

Slide 47 text

Entregar frequentemente software funcionando, de poucas semanas a poucos meses, com preferência à menor escala de tempo – Princípio 3 do Manifesto Ágil Entregar frequentemente software funcionando, de poucas semanas a poucos meses, com preferência à menor escala de tempo – Princípio 3 do Manifesto Ágil ” ” “ “

Slide 48

Slide 48 text

2016 2013 2003

Slide 49

Slide 49 text

Event Storming Event Storming

Slide 50

Slide 50 text

User Story Mapping User Story Mapping

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

Não podemos fugir da Responsabilidade de sermos humanos Nigel Warburton sobre a filosofia de Jean-Paul Sartre Não podemos fugir da Responsabilidade de sermos humanos Nigel Warburton sobre a filosofia de Jean-Paul Sartre “ “ ” ”

Slide 53

Slide 53 text

blog.eriksen.com.br/palestras [email protected] @eriksencosta