Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Encontrando o equilíbrio do DDD enquanto sua aplicação cresce

Encontrando o equilíbrio do DDD enquanto sua aplicação cresce

Carolina Karklis

August 31, 2019
Tweet

Other Decks in Programming

Transcript

  1. @carolkarklis Desenvolvedora de software na Magnetis Ruby e Elixir ❤

    Gatos Comunidade Diversidade e inclusão ‍♀
  2. 01 Visão geral de Domain Driven Design (DDD) agenda 02

    Por quê usar DDD? 03 Começando com DDD 04 Abordagens para cada cenário @carolkarklis
  3. A motivação por trás dessa talk veio de um outro

    evento de tecnologia Photo by James Pond on Unsplash @carolkarklis
  4. Quando será que é o momento certo de prestar mais

    atenção no código e na arquitetura?
  5. O objetivo da talk ▪ Entender o básico do que

    é DDD ▪ Conseguir identificar o momento atual da empresa ▪ Qual a melhor abordagem pro atual momento (técnica ou não técnica) ▪ Inspirar e incentivar a visão de trazer valor pro negócio através do código @carolkarklis
  6. O que não é ▪ A linguagem do negócio (jargões,

    termos, etc) Photo by Hans-Peter Gauster on Unsplash
  7. O que não é ▪ A linguagem do negócio (jargões,

    termos, etc) ▪ Comunicação feita pelos especialistas do domínio Photo by Hans-Peter Gauster on Unsplash
  8. O que não é ▪ A linguagem do negócio (jargões,

    termos, etc) ▪ Comunicação feita pelos especialistas do domínio ▪ Um jeito de nomear coisas no código Photo by Hans-Peter Gauster on Unsplash
  9. O que não é ▪ A linguagem do negócio (jargões,

    termos, etc) ▪ Comunicação feita pelos especialistas do domínio ▪ Um jeito de nomear coisas no código ▪ A forma que desenvolvedores se comunicam sobre o sistema Photo by Hans-Peter Gauster on Unsplash
  10. O que não é ▪ A linguagem do negócio (jargões,

    termos, etc) ▪ Comunicação feita pelos especialistas do domínio ▪ Um jeito de nomear coisas no código ▪ A forma que desenvolvedores se comunicam sobre o sistema ▪ Comunicação sobre as coisas que o sistema deveria fazer Photo by Hans-Peter Gauster on Unsplash
  11. A linguagem ubíqua Ela é baseada no modelo do domínio

    e expressa como o sistema funciona de uma forma compreensível para o time inteiro É uma linguagem sobre o conhecimento compartilhado do domínio feita pelo time
  12. "Ao implementar DDD, é esperado que o design do código

    seja questionado" Vaughn Vernon, no livro Implementing Domain-Driven Design
  13. Por quê usar DDD? (ou como convencer seu time a

    dedicar tempo nessa prática)
  14. Investimentos levam tempo A definição de investimentos é aplicar recurso,

    tempo e esforço com a finalidade de obter algo depois. Você deve considerar se o time está disposto a investir em construir um software melhor.
  15. afirmação O sistema é completamente guiado por dados e você

    pode classificá-lo como uma solução CRUD (create, read, update, delete). Seu time apenas precisa de uma interface bonita para manipular os dados. Cenário #1
  16. afirmação O sistema é completamente guiado por dados e você

    pode classificá-lo como uma solução CRUD (create, read, update, delete). Seu time apenas precisa de uma interface bonita para manipular os dados. Cenário #1 diagnóstico Você não precisa de investir tempo e esforço do seu time para usar DDD. Isso não significa que você não deve se preocupar com a qualidade do código.
  17. afirmação O sistema requer apenas 30 ou menos operações de

    negócio, é provavelmente bem simples de ter uma visão geral do sistema. Isso significa que a sua aplicação não tem mais do que 30 casos de uso (métodos), e cada um deles tem regras de negócio mínimas. Por isso, você não sente falta de controle pela complexidade do negócio. Esse cenário é comum para startups fazendo o MVP. Cenário #2
  18. afirmação O sistema requer apenas 30 ou menos operações de

    negócio, é provavelmente bem simples de ter uma visão geral do sistema. Isso significa que a sua aplicação não tem mais do que 30 casos de uso (métodos), e cada um deles tem regras de negócio mínimas. Por isso, você não sente falta de controle pela complexidade do negócio. Esse cenário é comum para startups fazendo o MVP. Cenário #2 diagnóstico Você pode até ter um desafio em mente, mas usar DDD agora é um custo alto porque você não sentiu a dor da complexidade ainda. Talvez seja o momento de se juntar com os especialistas do domínio e evoluir a linguagem ubíqua.
  19. O que você pode fazer ▪ Evoluir a linguagem ubíqua

    ▪ Utilizar uma ferramenta que analise o código (rubocop, por exemplo) ▪ Fazer uma bagunça organizada ▪ Acompanhar métricas de software como Churn vs Complexity
  20. Crie um glossário dos termos que chamam a sua atenção

    Photo by You X Ventures on Unsplash
  21. Churn É uma medida sobre com que frequência um arquivo

    muda. Arquivos que mudam mais tem um churn maior
  22. Complexity Geralmente é feito o cálculo da Cyclomatic Complexity, que

    calcula a quantidade de caminhos independentes o código têm (transferências de controle, sequências lógicas, etc)
  23. "É através do design de OO que você para de

    se preocupar e aprende a amar a bagunça" Sandi Metz, na talk "Go ahead, make a mess"
  24. "Qual o custo futuro de não fazer nada agora?" Sandi

    Metz, na talk "Go ahead, make a mess"
  25. afirmação Digamos que você passou de 30 para 40 features

    e você está começando a questionar a complexidade das coisas que precisam ser feitas. O sistema talvez não seja mantido por um único time, mas outros times multidisciplinares. Você está pensativo sobre a evolução de produto dentro de cada time, e se é possível manter o sistema estável em qualidade de código e arquitetura. Cenário #3
  26. afirmação Digamos que você passou de 30 para 40 features

    e você está começando a questionar a complexidade das coisas que precisam ser feitas. O sistema talvez não seja mantido por um único time, mas outros times multidisciplinares. Você está pensativo sobre a evolução de produto dentro de cada time, e se é possível manter o sistema estável em qualidade de código e arquitetura. Cenário #3 diagnóstico Você está chegando perto do ponto onde existe um real benefício em fazer design de código: O benefício da produtividade e ser feliz. Você e seu time deveriam começar a falar sobre design de código (inclusive DDD).
  27. O que você pode fazer ▪ Se possível, fazer com

    que cada time tenha pelo menos uma pessoa com experiência em design de código ▪ Fazer checks periódicos para falar de qualidade de código e arquitetura (com líderes do time) ▪ Fazer fishbowls/encontros com o time de dev e produto para falar sobre isso e analisar as oportunidades ▪ Começar o DDD com Strategic Modeling e não Tactical patterns
  28. Definir bounded contexts É um componente tão importante quanto a

    linguagem ubíqua ao praticar DDD. É como o DDD lida com modelos ou subdomínios grandes: Separando eles por intenções do negócio.
  29. exercício ▪ Faça uma lista de todos subdomínios que você

    se lembra dentro do seu dia a dia ▪ Faça uma lista de bounded contexts ▪ Use o template anterior pra entender como os bounded contexts se integram/relacionam ▪ Faça e refaça quantas vezes for necessário
  30. afirmação Muitas pessoas e features para serem administradas. Os requisitos

    mudam e isso requer muito esforço do time em pensar como manter o código atual e ainda fazer as mudanças necessárias sem que outras coisas quebrem no sistema. Cenário #4
  31. afirmação Muitas pessoas e features para serem administradas. Os requisitos

    mudam e isso requer muito esforço do time em pensar como manter o código atual e ainda fazer as mudanças necessárias sem que outras coisas quebrem no sistema. Cenário #4
  32. afirmação Muitas pessoas e features para serem administradas. Os requisitos

    mudam e isso requer muito esforço do time em pensar como manter o código atual e ainda fazer as mudanças necessárias sem que outras coisas quebrem no sistema. Cenário #4 diagnóstico Chegou o momento esperado de investir em design de código e praticar DDD o quanto for possível. É hora de planejar mudanças no seu sistema.
  33. afirmação Muitas pessoas e features para serem administradas. Os requisitos

    mudam e isso requer muito esforço do time em pensar como manter o código atual e ainda fazer as mudanças necessárias sem que outras coisas quebrem no sistema. Cenário #4 diagnóstico Chegou o momento esperado de investir em design de código e praticar DDD o quanto for possível. É hora de planejar mudanças no seu sistema.
  34. O que você pode fazer ▪ Junte todo o esforço

    em Strategic Modeling para usar tactical patterns ▪ Planeja as mudanças e mão na massa
  35. Tactical Patterns E também mais práticos que os utilizados no

    Strategic Modeling. Vale ressaltar que esses patterns são aplicados dentro de um bounded context São recursos mais próximos do código
  36. Patterns de relacionamento entre bounded contexts ▪ Shared Kernel ▪

    Customer/Supplier ▪ Conformist ▪ Partner ▪ Anti Corruption Layer