Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Domain Driven Design
com Python
Frederico Cabral
Frederico Cabral
• Carioca 

• Triatleta
• Primeiro software profissional em 2000
• Python, C#, Ruby
Nosso Cliente
Quero vender na WEB!!!
Preciso de um programador RockStar!
Programador Contratado
Skills do Programador
• Mindset Ágil
• Manja dos paranuê de Django e Python
• PHD em Design Patterns

• Extremamente profis...
“Vamos lá garoto!"
Preciso de solução de ecommerce revolucionária
NÃO! Tá achando que fazer um ecommerce é que
nem abrir uma das suas lojinhas num shopping?
Pq não começamos
apenas com um catálogo
de produtos?
2 semanas depois…
Boa garoto! Você é fantástico
Vamos ver se você é bom mesmo!

Agora quero que meu cliente feche a
compra direto pelo site
Claro! Ta duvidando de mim?
Vai ficar melhor que o da Amazon
Preciso apenas de 1 mes
3 meses depois
Cadê a compra?
Preciso integrar com o
meu sistema de estoque
Meus Deus!
Tudo bem. Mas vou precisar
de mais programadores
Pleno Pleno Estagiário
6 meses depois…

As coisas continuam acumulando
Preciso de sistema
de Pagamento
Online
e Integração com o
SAP
X
Qual foi o erro?
0
4.5
9
13.5
18
Janeiro Março Jun Setembro
Lead time
CATALOGO SISTEMA
CLIENTE DEV
CATALOGO
SISTEMA
COMPRA
CLIENTE DEV
0
1.25
2.5
3.75
5
Janeiro Março
Lead time
CATALOGO
SISTEMA
COMPRA
ESTOQUE
CLIENTE DEV
0
2.5
5
7.5
10
Janeiro Março Jun
Lead time
CATALOGO
SISTEMA
COMPRA
ESTOQUE
PAGAMENTO
SAP
CLIENTE DEV
0
4.5
9
13.5
18
Janeiro Março Jun Setembro
Lead time
"Software Monolítico é o
problema!!!"
SERÁ?
http://wrd.cm/1UV07Xo
Google Is 2 Billion Lines of Code
And It’s All in One Place
Monolítico
Monolítico Microservices
TECNOLOGIANEGÓCIO GAP
–Melvin Conway’s Law - 1968
“Organizations which design systems are
constrained to produce designs which are
copies of the...
NEGÓCIO TECNOLOGIA
ESSA PALESTRA
Como resolvemos
isso?
–Eric Evans
“Domain-driven design
(DDD) is an approach to
developing software for
complex needs by deeply
connecting the
i...
Domain
Subdomains
Bounded Contexts

Ubiquitous Language
Domain
• Define o que a empresa faz
• É o motivo do seu software existir
• Faz parte do “Problem Space”
• Composto de vário...
Domain & Subdomains
Estoque
Contabilidade
Catalogo
Compras
Pagamento
Ubiquitous Language
OBRA
OBRA
Taxa
Prazo
Classificação
Reservar()
Ativo IPO
Taxa
Prazo
Classificação
Comprar()
Vender()
Ativo Renda Fixa
Código
Nome
Ativi...
Ao invés disso Nós fazemos isso
Bounded Context
• Delimita o “Domain Model"
• Faz parte do “Solution Space”
• Funciona como um fronteira para a
Linguagem ...
Bounded Context x Subdomains
• O ideal seria uma relação de 1x1.
Porém, o mundo real não é tão simples
• Um subdomain pode...
Subdomains x Bounded Contexts
Estoque
Contabilidade
Catalogo
Compras
Pagamento
Subdomains x Bounded Contexts
Estoque
Contabilidade
Catalogo
Compras
Pagamento
Subdomains x Bounded Contexts
Estoque
Contabilidade
Catalogo
Compras
Pagamento
Podem existir Bounded Contexts
não focados no negócio?
Estoque
Contabilidade
Catalogo
Compras
Pagamento
Authentication
Cor...
Bounded Context na prática
• Pode ser um simple diretório
• Pode ser uma App Django
• Pode ser um Microserviço
• Um softwa...
O que vai no Bounded Context?
• Entidades, Objetos de Valor,
Agregadores, Eventos, Serviços
• Tem autonomia técnica para u...
“O domínio muda o tempo todo.
O seu Bounded Context precisa
acompanhar essas mudanças”
– Vaughn Vernon -
Implementing Domain Driven
Design
“If our model were music,
they would have the
unmistakable sound of
co...
Context Maps
Protegendo seu domínio de influencias externas
Compras
Estoque
Up
Down
ACL
ANTICORRUPTION LAYER
ProdutoProduto
EstoqueCompras
Estoque não deve conhecer a classe Produto
que vem do Bounded de Context Compras!!!
ProdutoProduto
EstoqueCompras
ACL
Entity & Value Objects
O coração do coração
Muitos atributos!!
Método para nome do cliente
Método para endereço
Verbosidade
Value Object
Value Object
Nomes mais curtos
Value Objects são imutáveis!
Validação:
Ex: Final deve ser maior que Inicial
Entidades
• Contém estado(atributos) e comportamento(métodos)
• Local onde iremos processar a grande maioria das
nossas re...
Value Objects
• Api mais intuitiva. Nomes menores
• Organiza melhor as responsabilidades
• Pode ajudar com performance(fly-...
Factories
Quando criar um objeto virou uma tarefa para Hércules
{
Dicas para Factories
• Usado para criar objetos complexos
• Pode acessar repositórios ou serviços
• Pode ser uma Factory C...
Domain Services
Regra de calculo de frete interage com vários objetos
Lembre das exceções!
Dicas para Domain Services
• Stateless
• Usado apenas quando determinada operação não se
encaixa em nenhum objeto de negóc...
Repository
Pq não me interessa onde estão os dados
Dicas para Repositórios
• Apenas uma abstração. Não sabe persistir os
dados
• Não é um DAO (Data Access Object)
• Deve par...
Domain Event
“Acontecimentos" empresariais
Dicas para Domain Events
• Dá pra implementar de várias maneiras
• Cuidado para não criar um Event Driven Design
• Só use ...
O maior risco de Domain Events
Diversos patterns
Python Puro!
Nenhuma dependência
de frameworks
Recapitulando
• Bounded Contexts, demarcam uma linguagem única
• Nossos objetos, propriedades, métodos, etc
precisam expre...
Ciclo
Failing Test Make the
test pass
Refactor
TDD
Failing Feature
Make the
Feature pass
BDD
DDD
Domain Learning
CORE
Entities e Value Objects
Factories, Services, Repository,
Events, ACL
Django, Flask
Nunca é 100%!!!
Arquitetura Hexag...
Trabalho num legadão!!
DDD é impossível pra mim!!
Vai valer à pena!
Dicas para começar…
• Descubra quem verdadeiramente é o seu domain
expert
• Identifique os domínios e subdomínios
• Identifi...
Dicas para começar…
• No inicio, o foco é aprender. Não tente fazer isso
no Core.
• Exercite o hábito de colaborar com o d...
DDD
• Colaboração!!
• Um meio de aproximar negócio e
tecnologia
• Ágil
• Mantém a ideia artesanal do
desenvolvimento de so...
DDD é um mindset!
–Napoleon Hill
“Não devemos ter medo das novas ideias!
Elas podem significar a diferença entre o
triunfo e o fracasso.”
OBRIGADO!
@fredportocabral
Domain Driven Design com Python
Domain Driven Design com Python
Domain Driven Design com Python
Domain Driven Design com Python
Domain Driven Design com Python
Domain Driven Design com Python
Domain Driven Design com Python
Domain Driven Design com Python
Domain Driven Design com Python
Domain Driven Design com Python
Upcoming SlideShare
Loading in …5
×

Domain Driven Design com Python

6,010 views

Published on

Como diminuir o gap entre negócio e tecnologia e ainda por cima com Python.
Palestra apresentada no The Developers Conference 2015 - Porto Alegre

Published in: Software
  • DOWNLOAD THI5 BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THI5 BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Domain Driven Design com Python

  1. 1. Domain Driven Design com Python Frederico Cabral
  2. 2. Frederico Cabral • Carioca 
 • Triatleta • Primeiro software profissional em 2000 • Python, C#, Ruby
  3. 3. Nosso Cliente
  4. 4. Quero vender na WEB!!! Preciso de um programador RockStar!
  5. 5. Programador Contratado
  6. 6. Skills do Programador • Mindset Ágil • Manja dos paranuê de Django e Python • PHD em Design Patterns
 • Extremamente profissional
  7. 7. “Vamos lá garoto!" Preciso de solução de ecommerce revolucionária
  8. 8. NÃO! Tá achando que fazer um ecommerce é que nem abrir uma das suas lojinhas num shopping?
  9. 9. Pq não começamos apenas com um catálogo de produtos?
  10. 10. 2 semanas depois…
  11. 11. Boa garoto! Você é fantástico
  12. 12. Vamos ver se você é bom mesmo!
 Agora quero que meu cliente feche a compra direto pelo site
  13. 13. Claro! Ta duvidando de mim? Vai ficar melhor que o da Amazon Preciso apenas de 1 mes
  14. 14. 3 meses depois
  15. 15. Cadê a compra?
  16. 16. Preciso integrar com o meu sistema de estoque Meus Deus! Tudo bem. Mas vou precisar de mais programadores
  17. 17. Pleno Pleno Estagiário
  18. 18. 6 meses depois…
 As coisas continuam acumulando
  19. 19. Preciso de sistema de Pagamento Online e Integração com o SAP
  20. 20. X
  21. 21. Qual foi o erro?
  22. 22. 0 4.5 9 13.5 18 Janeiro Março Jun Setembro Lead time
  23. 23. CATALOGO SISTEMA CLIENTE DEV
  24. 24. CATALOGO SISTEMA COMPRA CLIENTE DEV
  25. 25. 0 1.25 2.5 3.75 5 Janeiro Março Lead time
  26. 26. CATALOGO SISTEMA COMPRA ESTOQUE CLIENTE DEV
  27. 27. 0 2.5 5 7.5 10 Janeiro Março Jun Lead time
  28. 28. CATALOGO SISTEMA COMPRA ESTOQUE PAGAMENTO SAP CLIENTE DEV
  29. 29. 0 4.5 9 13.5 18 Janeiro Março Jun Setembro Lead time
  30. 30. "Software Monolítico é o problema!!!" SERÁ?
  31. 31. http://wrd.cm/1UV07Xo Google Is 2 Billion Lines of Code And It’s All in One Place
  32. 32. Monolítico
  33. 33. Monolítico Microservices
  34. 34. TECNOLOGIANEGÓCIO GAP
  35. 35. –Melvin Conway’s Law - 1968 “Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.”
  36. 36. NEGÓCIO TECNOLOGIA ESSA PALESTRA
  37. 37. Como resolvemos isso?
  38. 38. –Eric Evans “Domain-driven design (DDD) is an approach to developing software for complex needs by deeply connecting the implementation to an evolving model of the core business concepts.”
  39. 39. Domain Subdomains Bounded Contexts
 Ubiquitous Language
  40. 40. Domain • Define o que a empresa faz • É o motivo do seu software existir • Faz parte do “Problem Space” • Composto de vários Subdomains
  41. 41. Domain & Subdomains Estoque Contabilidade Catalogo Compras Pagamento
  42. 42. Ubiquitous Language
  43. 43. OBRA OBRA
  44. 44. Taxa Prazo Classificação Reservar() Ativo IPO Taxa Prazo Classificação Comprar() Vender() Ativo Renda Fixa Código Nome Atividade Comprar() Vender() Ativo Ações CLASSE “ATIVO”
  45. 45. Ao invés disso Nós fazemos isso
  46. 46. Bounded Context • Delimita o “Domain Model" • Faz parte do “Solution Space” • Funciona como um fronteira para a Linguagem Ubíqua • Tenta conciliar a parte técnica com a parte de negócios
  47. 47. Bounded Context x Subdomains • O ideal seria uma relação de 1x1. Porém, o mundo real não é tão simples • Um subdomain pode ser composto de vários Bounded Contexts • Um bounded context pode representar vários subdomínios
  48. 48. Subdomains x Bounded Contexts Estoque Contabilidade Catalogo Compras Pagamento
  49. 49. Subdomains x Bounded Contexts Estoque Contabilidade Catalogo Compras Pagamento
  50. 50. Subdomains x Bounded Contexts Estoque Contabilidade Catalogo Compras Pagamento
  51. 51. Podem existir Bounded Contexts não focados no negócio? Estoque Contabilidade Catalogo Compras Pagamento Authentication Core Suporte Genérico
  52. 52. Bounded Context na prática • Pode ser um simple diretório • Pode ser uma App Django • Pode ser um Microserviço • Um software de terceiro
  53. 53. O que vai no Bounded Context? • Entidades, Objetos de Valor, Agregadores, Eventos, Serviços • Tem autonomia técnica para usar artefatos técnicos que achar melhor (Por ex: BD) • Fala a “Linguagem Ubíqua"
  54. 54. “O domínio muda o tempo todo. O seu Bounded Context precisa acompanhar essas mudanças”
  55. 55. – Vaughn Vernon - Implementing Domain Driven Design “If our model were music, they would have the unmistakable sound of completeness, purity, power, and possibly event elegance and beauty”
  56. 56. Context Maps Protegendo seu domínio de influencias externas
  57. 57. Compras Estoque Up Down ACL ANTICORRUPTION LAYER
  58. 58. ProdutoProduto EstoqueCompras Estoque não deve conhecer a classe Produto que vem do Bounded de Context Compras!!!
  59. 59. ProdutoProduto EstoqueCompras ACL
  60. 60. Entity & Value Objects O coração do coração
  61. 61. Muitos atributos!! Método para nome do cliente Método para endereço Verbosidade
  62. 62. Value Object Value Object Nomes mais curtos
  63. 63. Value Objects são imutáveis! Validação: Ex: Final deve ser maior que Inicial
  64. 64. Entidades • Contém estado(atributos) e comportamento(métodos) • Local onde iremos processar a grande maioria das nossas regras de negócio • Devem ser “Persistent Ignorance"
  65. 65. Value Objects • Api mais intuitiva. Nomes menores • Organiza melhor as responsabilidades • Pode ajudar com performance(fly-weight pattern) • Pode ser reaproveitado • Mais detalhes: http://bit.ly/1gL6AGL
  66. 66. Factories Quando criar um objeto virou uma tarefa para Hércules
  67. 67. {
  68. 68. Dicas para Factories • Usado para criar objetos complexos • Pode acessar repositórios ou serviços • Pode ser uma Factory Class ou um Factory Method
  69. 69. Domain Services
  70. 70. Regra de calculo de frete interage com vários objetos
  71. 71. Lembre das exceções!
  72. 72. Dicas para Domain Services • Stateless • Usado apenas quando determinada operação não se encaixa em nenhum objeto de negócio • Não se preocupa com transação ou qualquer outro detalhes de infra-estrutura • Se não for usado com cuidado, vai se transformar na “bala de prata” para regras de negócio • Uso excessivo vai gerar modelos anêmicos
  73. 73. Repository Pq não me interessa onde estão os dados
  74. 74. Dicas para Repositórios • Apenas uma abstração. Não sabe persistir os dados • Não é um DAO (Data Access Object) • Deve parecer que está guardando tudo em memória • Para dados relacionais, um ORM vai tornar a vida mais fácil
  75. 75. Domain Event “Acontecimentos" empresariais
  76. 76. Dicas para Domain Events • Dá pra implementar de várias maneiras • Cuidado para não criar um Event Driven Design • Só use mecanismo de fila se for muito necessário • Não use para operações atômicas
  77. 77. O maior risco de Domain Events
  78. 78. Diversos patterns Python Puro! Nenhuma dependência de frameworks
  79. 79. Recapitulando • Bounded Contexts, demarcam uma linguagem única • Nossos objetos, propriedades, métodos, etc precisam expressar linguagem ubíqua, e evitar “corrupção" de artefatos técnicos e de outros contextos • Suas regras de negócio estão nas entidades • Todos os patterns tem apenas um propósito. Proteger o seu domínio
  80. 80. Ciclo Failing Test Make the test pass Refactor TDD Failing Feature Make the Feature pass BDD DDD Domain Learning
  81. 81. CORE Entities e Value Objects Factories, Services, Repository, Events, ACL Django, Flask Nunca é 100%!!! Arquitetura Hexagonal
  82. 82. Trabalho num legadão!! DDD é impossível pra mim!!
  83. 83. Vai valer à pena!
  84. 84. Dicas para começar… • Descubra quem verdadeiramente é o seu domain expert • Identifique os domínios e subdomínios • Identifique os Bounded Contexts • Comece com o Bounded Context mais fácil tecnicamente
  85. 85. Dicas para começar… • No inicio, o foco é aprender. Não tente fazer isso no Core. • Exercite o hábito de colaborar com o domain expert. • Trate todo o resto do software como um Big Ball of Mud • Exercite a Linguagem Ubíqua
  86. 86. DDD • Colaboração!! • Um meio de aproximar negócio e tecnologia • Ágil • Mantém a ideia artesanal do desenvolvimento de software
  87. 87. DDD é um mindset!
  88. 88. –Napoleon Hill “Não devemos ter medo das novas ideias! Elas podem significar a diferença entre o triunfo e o fracasso.”
  89. 89. OBRIGADO! @fredportocabral

×