$30 off During Our Annual Pro Sale. View details »

B/CDD - RubyConf BR - 2022

B/CDD - RubyConf BR - 2022

https://bit.ly/aprendabcdd

Resumo
======
B/CDD é um processo de desenvolvimento que visa conciliar velocidade, qualidade e pragmatismo no desenvolvimento de software. Eu o criei ao longo dos últimos anos e o mesmo se provou eficaz em diferentes empresas, times e codebases Ruby/Rails.

A talk apresenta seus benefícios, fundamentos e foca em demonstrar sua aplicação de forma prática.

Descrição
========

O Ruby on Rails é um framework altamente produtivo e sempre foi escolhido como uma ferramenta para promover entregas, mas é muito comum ouvir relatos do quão difícil é escalar o desenvolvimento em um codebase na qual a complexidade ficou alta por conta da evolução das regras de negócio.

Todo negócio tem valor ao gerar valor para quem faz uso dele, e para isso precisa se adaptar continuamente para gerar cada vez mais valor para permanecer relevante e vivo.

Essa capacidade de adaptação está intrisicamente ligada a sua capacidade de entrega. Logo, conciliar velocidade com qualidade é determinante para obter os melhores resultados possíveis.

Eu criei o u-case como um meio de acomodar melhor as regras de negócio de um codebase Ruby / Rails, ou seja, eu o criei para potencializar o desenvolvimento usando Ruby on Rails. A partir de seu uso em diferentes codebases com diferente complexidades e diferentes dinâmicas de time e empresa, vi emergir um padrão de desenvolvimento que facilita a implementação e manutenção de funcionalidades. Um padrão capaz de conciliar velocidade com qualidade e que se adapta bem aos diferentes momentos que toda empresa passa. Esse padrão que recebeu o nome de B/CDD.

Rodrigo Serradura

September 09, 2022
Tweet

More Decks by Rodrigo Serradura

Other Decks in Programming

Transcript

  1. B/CDD Business/Context Driven Development with Ruby on Rails Photo by

    SpaceX on Unsplash
  2. @serradura rodrigo.serradura@gmail.com

  3. None
  4. None
  5. None
  6. https://bit.ly/adarb

  7. https://bit.ly/adarb-telegram

  8. Por que B/CDD?

  9. Velocidade + Qualidade

  10. Qualidade?

  11. Boas práticas de eng. de software

  12. Objetivo engenharia de software?

  13. Reduzir o custo da mudança

  14. Custo?

  15. Custo? • Custo para escrever código novo • Custo para

    promover mudanças em código existente • Custo para entender código existente • Custo da espera pelo código
  16. Velocidade?

  17. Baixo lead time

  18. None
  19. Mais resultado com menos código

  20. rails new person-api -d sqlite3 --api

  21. bin/rails db:create

  22. bin/rails g model Person first_name last_name

  23. bin/rails db:migrate

  24. bin/rails g controller People create

  25. None
  26. None
  27. None
  28. Status: 200

  29. Novo requisito Receber parâmetros como camelcase (firstName, lastName)

  30. bin/rails g migration rename_people_columns

  31. None
  32. bin/rails db:migrate

  33. None
  34. None
  35. None
  36. Status: 422

  37. None
  38. None
  39. Status: 200

  40. Qual foi o custo dessa mudança?

  41. Alteramos o DB e todas as camadas para atender os

    novos requisitos
  42. Ao que o cliente da API se acoplou?

  43. Ao banco de dados!!!

  44. O que é acoplamento?

  45. Propagação de mudanças

  46. Propagação de mudanças

  47. Tem como reduzir esse custo?

  48. Sim. Desacople os parâmetros da persistência

  49. None
  50. Facilidade versus Simplicidade

  51. Facilidade Simplicidade versus

  52. versus A simplicidade é a superação da complexidade Facilidade Simplicidade

  53. None
  54. Mais resultado com menos código

  55. Mais resultado com menos acoplamento

  56. Racional até aqui Custo do software = Investimento necessário para

    promover mudanças (manter o sistema) Acoplamento = Propagação de mudanças Alto acoplamento = Alto custo para manter o software Baixo custo para manter o software = Baixo Acoplamento
  57. Racional até aqui Desacoplar código = Reduzir o custo da

    mudança Reduzir o custo da mudança = Engenharia de software Engenharia de software = Qualidade Qualidade = Desacoplar código
  58. Como desacoplar código?

  59. Coesão!

  60. O que é coesão?

  61. Manter junto o que faz sentido

  62. None
  63. Estrutura de pastas e arquivos do Rails

  64. 02 directories, 06 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb └── models ├── application_record.rb ├── todo.rb └── user.rb v00
  65. 04 directories, 12 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb ├── models │ ├── application_record.rb │ ├── todo.rb │ └── user.rb ├── serializers │ ├── application_serializer.rb │ ├── todo_serializer.rb │ └── user_serializer.rb └── services ├── application_service.rb ├── todo_service.rb └── user_service.rb v01
  66. 04 directories, 17 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb ├── models │ ├── application_record.rb │ ├── todo.rb │ └── user.rb ├── serializers │ ├── application_serializer.rb │ ├── todo_serializer.rb │ └── user_serializer.rb └── services ├── application_service.rb ├── complete_todo_service.rb ├── create_todo_service.rb ├── create_user_service.rb ├── destroy_todo_service.rb ├── find_todo_service.rb ├── find_todos_service.rb └── uncomplete_todo_service.rb v02
  67. 06 directories, 17 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb ├── models │ ├── application_record.rb │ ├── todo.rb │ └── user.rb ├── serializers │ ├── application_serializer.rb │ ├── todo_serializer.rb │ └── user_serializer.rb └── services ├── application_service.rb ├── todo │ ├── complete_service.rb │ ├── create_service.rb │ ├── destroy_service.rb │ ├── find_all_service.rb │ ├── find_service.rb │ └── uncomplete_service.rb └── user └── create_service.rb v03
  68. 09 directories, 22 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb ├── enums │ ├── todo_statuses_enum.rb │ └── user_roles_enum.rb ├── models │ ├── application_record.rb │ ├── todo.rb │ └── user.rb ├── permitted_params │ ├── todo_permitted_params.rb │ └── user_permitted_params.rb ├── serializers │ ├── application_serializer.rb │ ├── todo_serializer.rb │ └── user_serializer.rb ├── services │ ├── application_service.rb │ ├── todo │ │ ├── complete_service.rb │ │ ├── create_service.rb │ │ ├── destroy_service.rb │ │ ├── find_all_service.rb │ │ ├── find_service.rb │ │ └── uncomplete_service.rb │ └── user │ └── create_service.rb └── value_objects └── user_password_value_object.rb v04
  69. 16 directories, 22 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb ├── enums │ ├── todo │ │ └── statuses_enum.rb │ └── user │ └── roles_enum.rb ├── models │ ├── application_record.rb │ ├── todo.rb │ └── user.rb ├── permitted_params │ ├── todo │ │ └── permitted_params.rb │ └── user │ └── permitted_params.rb ├── serializers │ ├── application_serializer.rb │ ├── todo │ │ └── serializer.rb │ └── user │ └── serializer.rb ├── services │ ├── application_service.rb │ ├── todo │ │ ├── complete_service.rb │ │ ├── create_service.rb │ │ ├── destroy_service.rb │ │ ├── find_all_service.rb │ │ ├── find_service.rb │ │ └── uncomplete_service.rb │ └── user │ └── create_service.rb └── value_objects └── user └── password_value_object.rb v05
  70. 16 directories, 22 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb ├── enums │ ├── todo │ │ └── statuses.rb │ └── user │ └── roles.rb ├── models │ ├── application_record.rb │ ├── todo.rb │ └── user.rb ├── permitted_params │ ├── todo │ │ └── permitted_params.rb │ └── user │ └── permitted_params.rb ├── serializers │ ├── application_serializer.rb │ ├── todo │ │ └── serializer.rb │ └── user │ └── serializer.rb ├── services │ ├── application_service.rb │ ├── todo │ │ ├── complete.rb │ │ ├── create.rb │ │ ├── destroy.rb │ │ ├── find.rb │ │ ├── find_all.rb │ │ └── uncomplete.rb │ └── user │ └── create.rb └── value_objects └── user └── password.rb v06
  71. 06 directories, 22 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb └── models ├── application_record.rb ├── application_serializer.rb ├── application_service.rb ├── todo │ ├── permitted_params.rb │ ├── serializer.rb │ ├── services │ │ ├── complete.rb │ │ ├── create.rb │ │ ├── destroy.rb │ │ ├── find.rb │ │ ├── find_all.rb │ │ └── uncomplete.rb │ └── statuses.rb ├── todo.rb ├── user │ ├── password.rb │ ├── permitted_params.rb │ ├── roles.rb │ ├── serializer.rb │ └── services │ └── create.rb └── user.rb v07
  72. 05 directories, 22 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb └── models ├── application_record.rb ├── application_serializer.rb ├── application_service.rb ├── todo │ ├── list │ │ ├── add_item.rb │ │ ├── complete_item.rb │ │ ├── destroy_item.rb │ │ ├── find_item.rb │ │ ├── find_items.rb │ │ └── uncomplete_item.rb │ ├── permitted_params.rb │ ├── serializer.rb │ └── statuses.rb ├── todo.rb ├── user │ ├── password.rb │ ├── permitted_params.rb │ ├── register.rb │ ├── roles.rb │ └── serializer.rb └── user.rb v08
  73. 05 directories, 22 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb └── models ├── application_record.rb ├── application_serializer.rb ├── application_service.rb ├── todo │ ├── list │ │ ├── add_item.rb │ │ ├── complete_item.rb │ │ ├── destroy_item.rb │ │ ├── find_item.rb │ │ ├── find_items.rb │ │ └── uncomplete_item.rb │ ├── permitted_params.rb │ ├── record.rb │ ├── serializer.rb │ └── statuses.rb └── user ├── password.rb ├── permitted_params.rb ├── record.rb ├── register.rb ├── roles.rb └── serializer.rb v09
  74. 05 directories, 22 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos_controller.rb │ └── users_controller.rb └── models ├── application_record.rb ├── todo │ ├── list │ │ ├── add_item.rb │ │ ├── complete_item.rb │ │ ├── destroy_item.rb │ │ ├── find_item.rb │ │ ├── find_items.rb │ │ └── uncomplete_item.rb │ ├── permitted_params.rb │ ├── record.rb │ ├── serializer.rb │ └── statuses.rb └── user ├── password.rb ├── permitted_params.rb ├── record.rb ├── register.rb ├── roles.rb └── serializer.rb lib ├── application_serializer.rb └── application_service.rb v10
  75. 07 directories, 22 files app ├── controllers │ ├── application_controller.rb

    │ ├── todos │ │ ├── permitted_params.rb │ │ └── serializer.rb │ ├── todos_controller.rb │ ├── users │ │ ├── permitted_params.rb │ │ └── serializer.rb │ └── users_controller.rb └── models ├── application_record.rb ├── todo │ ├── list │ │ ├── add_item.rb │ │ ├── complete_item.rb │ │ ├── destroy_item.rb │ │ ├── find_item.rb │ │ ├── find_items.rb │ │ └── uncomplete_item.rb │ ├── record.rb │ └── statuses.rb └── user ├── password.rb ├── record.rb ├── register.rb └── roles.rb lib ├── application_serializer.rb └── application_service.rb v11
  76. Comparando as versões

  77. versus app ├── controllers │ ├── application_controller.rb │ ├── todos_controller.rb

    │ └── users_controller.rb ├── enums │ ├── todo_statuses_enum.rb │ └── user_roles_enum.rb ├── models │ ├── application_record.rb │ ├── todo.rb │ └── user.rb ├── permitted_params │ ├── todo_permitted_params.rb │ └── user_permitted_params.rb ├── serializers │ ├── application_serializer.rb │ ├── todo_serializer.rb │ └── user_serializer.rb ├── services │ ├── application_service.rb │ ├── todo │ │ ├── complete_service.rb │ │ ├── create_service.rb │ │ ├── destroy_service.rb │ │ ├── find_all_service.rb │ │ ├── find_service.rb │ │ └── uncomplete_service.rb │ └── user │ └── create_service.rb └── value_objects └── user_password_value_object.rb v04 app ├── controllers │ ├── application_controller.rb │ ├── todos │ │ ├── permitted_params.rb │ │ └── serializer.rb │ ├── todos_controller.rb │ ├── users │ │ ├── permitted_params.rb │ │ └── serializer.rb │ └── users_controller.rb └── models ├── application_record.rb ├── todo │ ├── list │ │ ├── add_item.rb │ │ ├── complete_item.rb │ │ ├── destroy_item.rb │ │ ├── find_item.rb │ │ ├── find_items.rb │ │ └── uncomplete_item.rb │ ├── record.rb │ └── statuses.rb └── user ├── password.rb ├── record.rb ├── register.rb └── roles.rb lib ├── application_serializer.rb └── application_service.rb v11
  78. versus app ├── controllers │ ├── application_controller.rb │ ├── todos_controller.rb

    │ └── users_controller.rb ├── enums │ ├── todo │ │ └── statuses.rb │ └── user │ └── roles.rb ├── models │ ├── application_record.rb │ ├── todo.rb │ └── user.rb ├── permitted_params │ ├── todo │ │ └── permitted_params.rb │ └── user │ └── permitted_params.rb ├── serializers │ ├── application_serializer.rb │ ├── todo │ │ └── serializer.rb │ └── user │ └── serializer.rb ├── services │ ├── application_service.rb │ ├── todo │ │ ├── complete.rb │ │ ├── create.rb │ │ ├── destroy.rb │ │ ├── find.rb │ │ ├── find_all.rb │ │ └── uncomplete.rb │ └── user │ └── create.rb └── value_objects └── user └── password.rb v06 app ├── controllers │ ├── application_controller.rb │ ├── todos │ │ ├── permitted_params.rb │ │ └── serializer.rb │ ├── todos_controller.rb │ ├── users │ │ ├── permitted_params.rb │ │ └── serializer.rb │ └── users_controller.rb └── models ├── application_record.rb ├── todo │ ├── list │ │ ├── add_item.rb │ │ ├── complete_item.rb │ │ ├── destroy_item.rb │ │ ├── find_item.rb │ │ ├── find_items.rb │ │ └── uncomplete_item.rb │ ├── record.rb │ └── statuses.rb └── user ├── password.rb ├── record.rb ├── register.rb └── roles.rb lib ├── application_serializer.rb └── application_service.rb v11
  79. versus app ├── controllers │ ├── application_controller.rb │ ├── todos

    │ │ ├── permitted_params.rb │ │ └── serializer.rb │ ├── todos_controller.rb │ ├── users │ │ ├── permitted_params.rb │ │ └── serializer.rb │ └── users_controller.rb └── models ├── application_record.rb ├── todo │ ├── list │ │ ├── add_item.rb │ │ ├── complete_item.rb │ │ ├── destroy_item.rb │ │ ├── find_item.rb │ │ ├── find_items.rb │ │ └── uncomplete_item.rb │ ├── record.rb │ └── statuses.rb └── user ├── password.rb ├── record.rb ├── register.rb └── roles.rb lib ├── application_serializer.rb └── application_service.rb v11 app ├── controllers │ ├── application_controller.rb │ ├── todos_controller.rb │ └── users_controller.rb └── models ├── application_record.rb ├── application_serializer.rb ├── application_service.rb ├── todo │ ├── list │ │ ├── add_item.rb │ │ ├── complete_item.rb │ │ ├── destroy_item.rb │ │ ├── find_item.rb │ │ ├── find_items.rb │ │ └── uncomplete_item.rb │ ├── permitted_params.rb │ ├── serializer.rb │ └── statuses.rb ├── todo.rb ├── user │ ├── password.rb │ ├── permitted_params.rb │ ├── register.rb │ ├── roles.rb │ └── serializer.rb └── user.rb v08
  80. Pode ter classes não ActiveRecord na pasta models?

  81. Sim!

  82. None
  83. None
  84. None
  85. Mais resultado com menos acoplamento

  86. Racional até aqui Desacoplar código = Promover coesão Coesão =

    Boas abstrações Boas abstrações = Modularização Modularização = Separação de responsabilidades Boa separação de responsabilidades = Coesão
  87. Racional até aqui Desacoplar código = Promover coesão Coesão =

    Boas abstrações Boas abstrações = Modularização Modularização = Separação de responsabilidades Boa separação de responsabilidades = Coesão Se for simples de entender, será fácil de mudar (manter)
  88. WTF/minute

  89. None
  90. ETC (Easy to Change)

  91. WTF/minute versus ETC

  92. WTF/minute ETC (Easy to Change) Lento + Qualidade Alto WTF

    Baixo ETC Baixo WTF Alto ETC Alto WTF Alto ETC Baixo WTF Baixo ETC Coesão (Se for simples de entender, será fácil de manter)
  93. WTF/minute ETC (Easy to Change) Lento + Qualidade Alto WTF

    Baixo ETC Baixo WTF Alto ETC Alto WTF Alto ETC Baixo WTF Baixo ETC Coesão (Se for simples de entender, será fácil de manter)
  94. O que é B/CDD?

  95. Velocidade + Qualidade

  96. Velocidade Qualidade Lento + Qualidade sem velocidade sem qualidade sem

    velocidade com qualidade com velocidade sem qualidade com velocidade com qualidade Entregar (Lead time sustentável)
  97. Velocidade Qualidade Lento + Qualidade sem velocidade sem qualidade sem

    velocidade com qualidade com velocidade sem qualidade com velocidade com qualidade Entregar (Lead time sustentável)
  98. Velocidade Qualidade Lento + Qualidade sem velocidade sem qualidade sem

    velocidade com qualidade com velocidade sem qualidade com velocidade com qualidade Entregar (Lead time sustentável)
  99. Velocidade Qualidade Lento + Qualidade sem velocidade sem qualidade sem

    velocidade com qualidade com velocidade sem qualidade com velocidade com qualidade Entregar (Lead time sustentável) Como?
  100. Velocidade Qualidade Lento + Qualidade com velocidade sem qualidade sem

    velocidade com qualidade com velocidade com qualidade sem velocidade sem qualidade Entregar (Lead time sustentável)
  101. Velocidade Qualidade Lento + Qualidade com velocidade sem qualidade sem

    velocidade com qualidade com velocidade com qualidade sem velocidade sem qualidade Make It work Entregar (Lead time sustentável)
  102. Velocidade Qualidade Lento + Qualidade com velocidade sem qualidade sem

    velocidade com qualidade com velocidade com qualidade sem velocidade sem qualidade Make It work Make It right Entregar (Lead time sustentável)
  103. Velocidade Qualidade Lento + Qualidade com velocidade sem qualidade sem

    velocidade com qualidade com velocidade com qualidade sem velocidade sem qualidade Make It work Make It right Make It even better Entregar (Lead time sustentável)
  104. Velocidade Qualidade Lento + Qualidade com velocidade sem qualidade sem

    velocidade com qualidade com velocidade com qualidade sem velocidade sem qualidade Make It work Make It right 1 2 3 Entrega Comportamento Entrega melhorias para a Estrutura Make It even better Entregar (Lead time sustentável)
  105. Velocidade Qualidade Lento + Qualidade com velocidade sem qualidade sem

    velocidade com qualidade com velocidade com qualidade sem velocidade sem qualidade Make It work Make It right Make It even better Entregar (Lead time sustentável)
  106. None
  107. None
  108. None
  109. None
  110. Velocidade Qualidade Lento + Qualidade com velocidade sem qualidade sem

    velocidade com qualidade com velocidade com qualidade sem velocidade sem qualidade Make It work Make It right Make It even better Entregar (Lead time sustentável)
  111. B/CDD Business/Context Driven Development

  112. Business/Context Driven Development Problema / Necessidade

  113. Problema / Necessidade Solução / Sistema Business/Context Driven Development

  114. Problema / Necessidade Solução / Sistema Receber uma transferência Internacional

    1. Criar conta de beneficiário PF / PJ 2. Cadastrar conta bancária PF /PJ 3. Criar conta Internacional p/ o beneficiário 4. Receber pagamento internacional 5. Enviar invoice do pagamento 6. Transferir valor cotado para o beneficiário 1 2 3 4 5 6 Business/Context Driven Development
  115. Problema / Necessidade Solução / Sistema Receber uma transferência Internacional

    1. Criar conta de beneficiário PF / PJ 2. Cadastrar conta bancária PF /PJ 3. Criar conta Internacional p/ o beneficiário 4. Receber pagamento internacional 5. Enviar invoice do pagamento 6. Transferir valor cotado para o beneficiário 1 2 3 4 5 6 ? Casos de uso Business/Context Driven Development
  116. Business/Context Driven Development

  117. Business/Context Driven Development Sistema = Casos de uso que o

    compõem.
  118. Business/Context Driven Development Sistema = Casos de uso que o

    compõem.
  119. Business/Context Driven Development Sistema = Casos de uso que o

    compõem. 1 2 3 4 5 6 1 2 3 4 5 6
  120. Business/Context Driven Development Sistema = Casos de uso que o

    compõem. 1 2 3 4 5 6 1 2 3 4 5 6 FATO: Todo sistema é orientado por casos de uso, seja de forma explícita ou implícita.
  121. Business/Context Driven Development Sistema = Casos de uso que o

    compõem. 1 2 3 4 5 6 1 2 3 4 5 6 FATO: Todo sistema é orientado por casos de uso, seja de forma explícita ou implícita. Rails way Módulos / Camada dedicada
  122. B/CDD Business/Context Driven Development

  123. 1. Pessoas + Momento do negócio 2. Codebase orientado ao

    negócio 3. Separação de responsabilidades (acoplamento e coesão) 4. Escalável (Monolito > Citadel > Microsserviços) Business/Context Driven Development
  124. B/CDD Pessoas + momento do negócio

  125. B/CDD: Pessoas + Momento do negócio Pessoas em diferentes níveis:

    - Junior - Pleno - Senior Momento do negócio: - Experimentação - Transformação - Consolidação
  126. Pessoas em diferentes níveis: - Junior - Pleno - Senior

    Momento do negócio: - Experimentação - Transformação - Consolidação B/CDD: Pessoas + Momento do negócio
  127. B/CDD Codebase orientado ao negócio

  128. Solução / Sistema 1. Criar conta de beneficiário PF /

    PJ 2. Cadastrar conta bancária PF /PJ 3. Criar conta Internacional p/ o beneficiário 4. Receber pagamento internacional 5. Enviar invoice do pagamento 6. Transferir valor cotado para o beneficiário 1 2 3 4 5 6 B/CDD: Codebase orientado ao negócio
  129. Solução / Sistema 1. Criar conta de beneficiário PF /

    PJ 2. Cadastrar conta bancária PF /PJ 3. Criar conta Internacional p/ o beneficiário 4. Receber pagamento internacional 5. Enviar invoice do pagamento 6. Transferir valor cotado para o beneficiário 1 2 3 4 5 6 B/CDD: Codebase orientado ao negócio
  130. Solução / Sistema 1. Criar conta de beneficiário PF /

    PJ 2. Cadastrar conta bancária PF /PJ 3. Criar conta Internacional p/ o beneficiário 4. Receber pagamento internacional 5. Enviar invoice do pagamento 6. Transferir valor cotado para o beneficiário 1 2 3 4 5 6 Beneficiários Pagamentos Invoices B/CDD: Codebase orientado ao negócio
  131. Solução / Sistema 1. Criar conta de beneficiário PF /

    PJ 2. Cadastrar conta bancária PF /PJ 3. Criar conta Internacional p/ o beneficiário 4. Receber pagamento internacional 5. Enviar invoice do pagamento 6. Transferir valor cotado para o beneficiário 1 2 3 4 5 6 Beneficiários Pagamentos Invoices 1. Casos de uso existem dentro de contextos. Ex: app/models/user/password/change.rb 2. No domínio, casos de uso estão no centro, o restante os orbitam (existem para representar as regras de negócio). app/models/user/ password.rb password/ change.rb B/CDD: Codebase orientado ao negócio
  132. B/CDD Separação de responsabilidades

  133. B/CDD: Separação de responsabilidades Context Entry Point Input Output Use

    Case Contrato/ Tradutor
  134. Requisições HTTP - Routes -> Controllers - Rack apps mounted

    - Rails Engines - Sinatra CLI - Rake tasks - Whenever - bin/rails runner Background Jobs - Active Job - Sidekiq Entry points em uma aplicação Ruby on Rails B/CDD: Separação de responsabilidades Context Entry Point Input Output Use Case Contrato/ Tradutor
  135. Requisições HTTP - Routes -> Controllers - Rack apps mounted

    - Rails Engines - Sinatra CLI - Rake tasks - Whenever - bin/rails runner Background Jobs - Active Job - Sidekiq Entry points em uma aplicação Ruby on Rails B/CDD: Separação de responsabilidades Context Entry Point Input Output Use Case Contrato/ Tradutor São entry points por serem processos isolados (a nível de SO).
  136. B/CDD Escalável

  137. B/CDD: Escalável Monolito (Modular) Citadel (Monolito Modular + Serviços satélites)

    Microsseviços Context Entry Point Input Output Use Case Contrato/ Tradutor
  138. Talk is cheap. Show me the code. Linus Torvalds

  139. None
  140. None
  141. None
  142. None
  143. None
  144. None
  145. None
  146. https://bit.ly/aprendabcdd

  147. Mais resultado com menos código

  148. Mais resultado com menos acoplamento

  149. Mais resultado com velocidade e qualidade

  150. Mais resultado com B/CDD

  151. Obrigado @serradura rodrigo.serradura@gmail.com ~50 horas de dedicação para preparar esse

    conteúdo. ;) Agradecimentos: Pedro Basilio Haroldo Furtado Tomás Coelho Vitor Avelino Ralf Schmitz Bongiolo Luiz Vasconcellos Wedson Lima Diego Linhares Mauricio Carvalho / Husky
  152. https://bit.ly/serraduraoop