Slide 1

Slide 1 text

@camposmilaa Boas práticas de Arquitetura @camposmilaa #MDPDay

Slide 2

Slide 2 text

@camposmilaa CAMILA Faço uns códigos na Creditas Organizo o Rails Girls São Paulo Organizo o Women Dev Summit Tô no twitter como @camposmilaa Campos

Slide 3

Slide 3 text

@camposmilaa Plataforma online Empréstimo com garantia Juros baixos pra você <3 creditas.com.br vagas.creditas.com.br @CreditasBR

Slide 4

Slide 4 text

@camposmilaa Incluir mulheres em TI Workshop de Rails Inspiração railsgirls.com.br fb.com/railsgirls.sp @RailsGirlsSP

Slide 5

Slide 5 text

@camposmilaa Junção de comunidades Incentivar mulheres em tech Palestras & Oficinas & Painéis womendevsummit.com fb.com/womendevsummit @WomenDevSummit

Slide 6

Slide 6 text

@camposmilaa Boas práticas de Arquitetura @camposmilaa #MDPDay

Slide 7

Slide 7 text

@camposmilaa Clean Architecture @camposmilaa #MDPDay

Slide 8

Slide 8 text

@camposmilaa

Slide 9

Slide 9 text

@camposmilaa

Slide 10

Slide 10 text

@camposmilaa

Slide 11

Slide 11 text

@camposmilaa

Slide 12

Slide 12 text

@camposmilaa

Slide 13

Slide 13 text

@camposmilaa

Slide 14

Slide 14 text

@camposmilaa

Slide 15

Slide 15 text

@camposmilaa

Slide 16

Slide 16 text

@camposmilaa por quê?

Slide 17

Slide 17 text

@camposmilaa por quê?

Slide 18

Slide 18 text

@camposmilaa precisamos entregar logo. vamo assim mesmo! depois a gente volta e arruma .

Slide 19

Slide 19 text

@camposmilaa big ball of mud

Slide 20

Slide 20 text

@camposmilaa

Slide 21

Slide 21 text

@camposmilaa

Slide 22

Slide 22 text

@camposmilaa the fact is that making messes is always slower than staying clean. Uncle Bob

Slide 23

Slide 23 text

@camposmilaa arquitetura

Slide 24

Slide 24 text

@camposmilaa

Slide 25

Slide 25 text

@camposmilaa

Slide 26

Slide 26 text

@camposmilaa a good architecture screams intention

Slide 27

Slide 27 text

@camposmilaa

Slide 28

Slide 28 text

@camposmilaa

Slide 29

Slide 29 text

@camposmilaa domain driven design (DDD)

Slide 30

Slide 30 text

@camposmilaa

Slide 31

Slide 31 text

@camposmilaa linguagem ubíqua

Slide 32

Slide 32 text

@camposmilaa linguagem ubíqua cliente

Slide 33

Slide 33 text

@camposmilaa linguagem ubíqua usuário cliente

Slide 34

Slide 34 text

@camposmilaa linguagem ubíqua cif cliente

Slide 35

Slide 35 text

@camposmilaa linguagem ubíqua cliente

Slide 36

Slide 36 text

@camposmilaa linguagem ubíqua cliente cliente

Slide 37

Slide 37 text

@camposmilaa arquitetura em camadas

Slide 38

Slide 38 text

@camposmilaa presentation domain application rules infrastructure

Slide 39

Slide 39 text

@camposmilaa presentation domain application rules infrastructure

Slide 40

Slide 40 text

@camposmilaa presentation domain application rules infrastructure

Slide 41

Slide 41 text

@camposmilaa domain application presentation infra

Slide 42

Slide 42 text

@camposmilaa arquitetura clean

Slide 43

Slide 43 text

@camposmilaa arquitetura onion

Slide 44

Slide 44 text

@camposmilaa arquitetura hexagonal

Slide 45

Slide 45 text

@camposmilaa domain application presentation infra

Slide 46

Slide 46 text

@camposmilaa

Slide 47

Slide 47 text

@camposmilaa

Slide 48

Slide 48 text

@camposmilaa

Slide 49

Slide 49 text

@camposmilaa é tudo “igual”!

Slide 50

Slide 50 text

@camposmilaa qual a ideia?

Slide 51

Slide 51 text

@camposmilaa independente de frameworks

Slide 52

Slide 52 text

@camposmilaa independente de frameworks independente de ui

Slide 53

Slide 53 text

@camposmilaa independente de frameworks independente de ui independente de banco de dados

Slide 54

Slide 54 text

@camposmilaa independente de frameworks independente de ui independente de banco de dados independente de agentes externos

Slide 55

Slide 55 text

@camposmilaa independente de frameworks independente de ui independente de banco de dados independente de agentes externos facilmente testável

Slide 56

Slide 56 text

@camposmilaa regras do jogo

Slide 57

Slide 57 text

@camposmilaa 1. respeita as camadas

Slide 58

Slide 58 text

@camposmilaa

Slide 59

Slide 59 text

@camposmilaa o que o sistema é o que o sistema faz

Slide 60

Slide 60 text

@camposmilaa coisas que meu sistema “não liga”

Slide 61

Slide 61 text

@camposmilaa comunicação do mundo externo com o core

Slide 62

Slide 62 text

@camposmilaa 2. dependências só de fora pra dentro

Slide 63

Slide 63 text

@camposmilaa

Slide 64

Slide 64 text

@camposmilaa

Slide 65

Slide 65 text

@camposmilaa

Slide 66

Slide 66 text

@camposmilaa

Slide 67

Slide 67 text

@camposmilaa mundo externo

Slide 68

Slide 68 text

@camposmilaa mundo externo banco de dados

Slide 69

Slide 69 text

@camposmilaa mundo externo web

Slide 70

Slide 70 text

@camposmilaa mundo externo frameworks

Slide 71

Slide 71 text

@camposmilaa mundo externo jobs agendados

Slide 72

Slide 72 text

@camposmilaa mundo externo terminal

Slide 73

Slide 73 text

@camposmilaa core application

Slide 74

Slide 74 text

@camposmilaa

Slide 75

Slide 75 text

@camposmilaa core application

Slide 76

Slide 76 text

@camposmilaa o que faz o que é

Slide 77

Slide 77 text

@camposmilaa

Slide 78

Slide 78 text

@camposmilaa o que o sistema é (entidades) CLIENTE - cpf - nome - data de nascimento

Slide 79

Slide 79 text

@camposmilaa o que o sistema é (entidades) IMÓVEL - rua - número - bairro

Slide 80

Slide 80 text

@camposmilaa o que o sistema é (entidades) AUTOMÓVEL - placa - modelo - marca

Slide 81

Slide 81 text

@camposmilaa o que o sistema é (entidades) GARANTIA - valor - dívidas

Slide 82

Slide 82 text

@camposmilaa o que o sistema é (entidades) ANÁLISE DE RISCO - data - resultado

Slide 83

Slide 83 text

@camposmilaa o que o sistema é (entidades)

Slide 84

Slide 84 text

@camposmilaa o que o sistema faz (use cases) criar

Slide 85

Slide 85 text

@camposmilaa o que o sistema faz (use cases) criar analisar risco

Slide 86

Slide 86 text

@camposmilaa o que o sistema faz (use cases) criar descartar analisar risco

Slide 87

Slide 87 text

@camposmilaa o que o sistema faz (use cases) criar conceder crédito descartar analisar risco

Slide 88

Slide 88 text

@camposmilaa criar solicitação DADOS DE ENTRADA - dados do cliente - dados da garantia (casa ou carro) - dados da solicitação (valores) FLUXO 1. cliente pede um empréstimo com os dados acima 2. sistema valida os dados 3. sistema cria uma solicitação 4. sistema envia um email ao cliente com dados da solicitação

Slide 89

Slide 89 text

@camposmilaa adapters

Slide 90

Slide 90 text

@camposmilaa adapters presenter controller use case interactor fluxo de controle mundo externo

Slide 91

Slide 91 text

@camposmilaa adapters presenter controller use case interactor fluxo de controle mundo externo

Slide 92

Slide 92 text

@camposmilaa e a regra da ordem das dependências?

Slide 93

Slide 93 text

@camposmilaa princípio da inversão de dependência presenter controller use case interactor fluxo de controle use case input port use case output port I I

Slide 94

Slide 94 text

@camposmilaa princípio da inversão de dependência

Slide 95

Slide 95 text

@camposmilaa por que isso é importante?

Slide 96

Slide 96 text

@camposmilaa http://bit.ly/importancia-clean-arq

Slide 97

Slide 97 text

@camposmilaa @cynthiazanoni

Slide 98

Slide 98 text

@camposmilaa @juuh42dias

Slide 99

Slide 99 text

@camposmilaa @juuh42dias

Slide 100

Slide 100 text

@camposmilaa

Slide 101

Slide 101 text

@camposmilaa foco em entregar a coisa certa

Slide 102

Slide 102 text

@camposmilaa foco em entregar a coisa certa devs entendendo o business

Slide 103

Slide 103 text

@camposmilaa foco em entregar a coisa certa devs entendendo o business manutenabilidade

Slide 104

Slide 104 text

@camposmilaa foco em entregar a coisa certa devs entendendo o business manutenabilidade felicidade das devs

Slide 105

Slide 105 text

@camposmilaa

Slide 106

Slide 106 text

@camposmilaa frases impactantes para finalizar com chave de ouro

Slide 107

Slide 107 text

@camposmilaa arquitetura [hexagonal/clean/etc] não é bala de prata

Slide 108

Slide 108 text

@camposmilaa the only way to go fast, is to go well. Uncle Bob

Slide 109

Slide 109 text

@camposmilaa any fool can write code that a computer can understand. good programmers write code that humans can understand. Martin Fowler

Slide 110

Slide 110 text

@camposmilaa Agradecida! bit.ly/mdp-camila camposmilaa

Slide 111

Slide 111 text

@camposmilaa Links legais (além dos livros citados) Clean Architecture - Uncle Bob https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html Screaming Architecture - Uncle Bob https://8thlight.com/blog/uncle-bob/2011/09/30/Screaming-Architecture.html Hexagonal Architecture - Alistair Cockburn http://alistair.cockburn.us/Hexagonal+architecture Hexagonal Rails - Matt Wynne http://blog.mattwynne.net/2012/05/31/hexagonal-rails-objects-values-and-hexagons/ Domain Driven Rails - Yan Pritzker https://vimeo.com/106759024 Clean Architecture - Uncle Bob https://www.youtube.com/watch?v=Nltqi7ODZTM Clean Architecture and Design - Uncle Bob https://www.youtube.com/watch?v=Nsjsiz2A9mg Hexagonal Rails - Matt Wynne https://www.youtube.com/watch?v=CGN4RFkhH2M

Slide 112

Slide 112 text

@camposmilaa BONUS! . juntando tudo

Slide 113

Slide 113 text

@camposmilaa user requests resource

Slide 114

Slide 114 text

@camposmilaa user requests resource controller json

Slide 115

Slide 115 text

@camposmilaa user requests resource request model controller tradução

Slide 116

Slide 116 text

@camposmilaa user requests resource request model controller use case request model

Slide 117

Slide 117 text

@camposmilaa user requests resource request model controller interação use case entity entity aggregate entity entity domain service

Slide 118

Slide 118 text

@camposmilaa user requests resource request model controller repository database persistência use case entity entity aggregate entity entity domain service

Slide 119

Slide 119 text

@camposmilaa user requests resource request model controller use case repository database persistência dip entity entity aggregate entity entity domain service

Slide 120

Slide 120 text

@camposmilaa user requests resource request model controller result model repository database tradução use case entity entity aggregate entity entity domain service

Slide 121

Slide 121 text

@camposmilaa user requests resource request model controller result model presenter repository database result model use case entity entity aggregate entity entity domain service

Slide 122

Slide 122 text

@camposmilaa user requests resource request model controller result model presenter repository database result model dip use case entity entity aggregate entity entity domain service

Slide 123

Slide 123 text

@camposmilaa user requests resource user gets resource back request model controller entity entity aggregate entity entity result model domain service presenter repository database json use case

Slide 124

Slide 124 text

@camposmilaa BONUS 2! . exemplo organização pastas

Slide 125

Slide 125 text

@camposmilaa