Slide 1

Slide 1 text

B/CDD Business/Context Driven Development with Ruby on Rails Photo by SpaceX on Unsplash

Slide 2

Slide 2 text

@serradura rodrigo.serradura@gmail.com

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

https://bit.ly/adarb

Slide 7

Slide 7 text

https://bit.ly/adarb-telegram

Slide 8

Slide 8 text

Por que B/CDD?

Slide 9

Slide 9 text

Velocidade + Qualidade

Slide 10

Slide 10 text

Qualidade?

Slide 11

Slide 11 text

Boas práticas de eng. de software

Slide 12

Slide 12 text

Objetivo engenharia de software?

Slide 13

Slide 13 text

Reduzir o custo da mudança

Slide 14

Slide 14 text

Custo?

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Velocidade?

Slide 17

Slide 17 text

Baixo lead time

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Mais resultado com menos código

Slide 20

Slide 20 text

rails new person-api -d sqlite3 --api

Slide 21

Slide 21 text

bin/rails db:create

Slide 22

Slide 22 text

bin/rails g model Person first_name last_name

Slide 23

Slide 23 text

bin/rails db:migrate

Slide 24

Slide 24 text

bin/rails g controller People create

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Status: 200

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

bin/rails g migration rename_people_columns

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

bin/rails db:migrate

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

Status: 422

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

Status: 200

Slide 40

Slide 40 text

Qual foi o custo dessa mudança?

Slide 41

Slide 41 text

Alteramos o DB e todas as camadas para atender os novos requisitos

Slide 42

Slide 42 text

Ao que o cliente da API se acoplou?

Slide 43

Slide 43 text

Ao banco de dados!!!

Slide 44

Slide 44 text

O que é acoplamento?

Slide 45

Slide 45 text

Propagação de mudanças

Slide 46

Slide 46 text

Propagação de mudanças

Slide 47

Slide 47 text

Tem como reduzir esse custo?

Slide 48

Slide 48 text

Sim. Desacople os parâmetros da persistência

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

Facilidade versus Simplicidade

Slide 51

Slide 51 text

Facilidade Simplicidade versus

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

Mais resultado com menos código

Slide 55

Slide 55 text

Mais resultado com menos acoplamento

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

Como desacoplar código?

Slide 59

Slide 59 text

Coesão!

Slide 60

Slide 60 text

O que é coesão?

Slide 61

Slide 61 text

Manter junto o que faz sentido

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

Estrutura de pastas e arquivos do Rails

Slide 64

Slide 64 text

02 directories, 06 files app ├── controllers │ ├── application_controller.rb │ ├── todos_controller.rb │ └── users_controller.rb └── models ├── application_record.rb ├── todo.rb └── user.rb v00

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

Comparando as versões

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

Pode ter classes não ActiveRecord na pasta models?

Slide 81

Slide 81 text

Sim!

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

No content

Slide 84

Slide 84 text

No content

Slide 85

Slide 85 text

Mais resultado com menos acoplamento

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

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)

Slide 88

Slide 88 text

WTF/minute

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

ETC (Easy to Change)

Slide 91

Slide 91 text

WTF/minute versus ETC

Slide 92

Slide 92 text

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)

Slide 93

Slide 93 text

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)

Slide 94

Slide 94 text

O que é B/CDD?

Slide 95

Slide 95 text

Velocidade + Qualidade

Slide 96

Slide 96 text

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)

Slide 97

Slide 97 text

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)

Slide 98

Slide 98 text

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)

Slide 99

Slide 99 text

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?

Slide 100

Slide 100 text

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)

Slide 101

Slide 101 text

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)

Slide 102

Slide 102 text

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)

Slide 103

Slide 103 text

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)

Slide 104

Slide 104 text

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)

Slide 105

Slide 105 text

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)

Slide 106

Slide 106 text

No content

Slide 107

Slide 107 text

No content

Slide 108

Slide 108 text

No content

Slide 109

Slide 109 text

No content

Slide 110

Slide 110 text

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)

Slide 111

Slide 111 text

B/CDD Business/Context Driven Development

Slide 112

Slide 112 text

Business/Context Driven Development Problema / Necessidade

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

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

Slide 116

Slide 116 text

Business/Context Driven Development

Slide 117

Slide 117 text

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

Slide 118

Slide 118 text

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

Slide 119

Slide 119 text

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

Slide 120

Slide 120 text

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.

Slide 121

Slide 121 text

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

Slide 122

Slide 122 text

B/CDD Business/Context Driven Development

Slide 123

Slide 123 text

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

Slide 124

Slide 124 text

B/CDD Pessoas + momento do negócio

Slide 125

Slide 125 text

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

Slide 126

Slide 126 text

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

Slide 127

Slide 127 text

B/CDD Codebase orientado ao negócio

Slide 128

Slide 128 text

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

Slide 129

Slide 129 text

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

Slide 130

Slide 130 text

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

Slide 131

Slide 131 text

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

Slide 132

Slide 132 text

B/CDD Separação de responsabilidades

Slide 133

Slide 133 text

B/CDD: Separação de responsabilidades Context Entry Point Input Output Use Case Contrato/ Tradutor

Slide 134

Slide 134 text

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

Slide 135

Slide 135 text

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

Slide 136

Slide 136 text

B/CDD Escalável

Slide 137

Slide 137 text

B/CDD: Escalável Monolito (Modular) Citadel (Monolito Modular + Serviços satélites) Microsseviços Context Entry Point Input Output Use Case Contrato/ Tradutor

Slide 138

Slide 138 text

Talk is cheap. Show me the code. Linus Torvalds

Slide 139

Slide 139 text

No content

Slide 140

Slide 140 text

No content

Slide 141

Slide 141 text

No content

Slide 142

Slide 142 text

No content

Slide 143

Slide 143 text

No content

Slide 144

Slide 144 text

No content

Slide 145

Slide 145 text

No content

Slide 146

Slide 146 text

https://bit.ly/aprendabcdd

Slide 147

Slide 147 text

Mais resultado com menos código

Slide 148

Slide 148 text

Mais resultado com menos acoplamento

Slide 149

Slide 149 text

Mais resultado com velocidade e qualidade

Slide 150

Slide 150 text

Mais resultado com B/CDD

Slide 151

Slide 151 text

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

Slide 152

Slide 152 text

https://bit.ly/serraduraoop