Slide 1

Slide 1 text

Casos de uso em Ruby Entenda na prática o poder do railway oriented programming com u-case Photo by Sunyu Kim on Unsplash

Slide 2

Slide 2 text

@serradura [email protected]

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Agenda - A estória que levou ao u-case - Railway Oriented Programming em Ruby - Aplicando u-case na prática numa aplicação Rails

Slide 5

Slide 5 text

A estória que levou ao u-case

Slide 6

Slide 6 text

Minha história

Slide 7

Slide 7 text

Minha história 2006-2010 Analista de negócios (planilheiro, desenhista de diagramas, mapeador de processos...)

Slide 8

Slide 8 text

O que é um processo?

Slide 9

Slide 9 text

https://www.youtube.com/watch?v=w95z9XHSAqc

Slide 10

Slide 10 text

https://www.youtube.com/watch?v=w95z9XHSAqc

Slide 11

Slide 11 text

Processo: Uma sequência de ações/etapas para atingir um resultado.

Slide 12

Slide 12 text

https://www.tjpr.jus.br/tecnologia-da-informacao?p_p_id=36&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&_36_struts_action=%2F wiki%2Fview&p_r_p_185834411_nodeName=Governan%C3%A7a-TIC&p_r_p_185834411_title=sobre+Processo+de+TI&p_r_p_185834411_no deId=6228681

Slide 13

Slide 13 text

O que é um caso de uso?

Slide 14

Slide 14 text

Caso de uso: É uma descrição de como uma pessoa usa um processo ou sistema para alcançar um objetivo (resultado).

Slide 15

Slide 15 text

Ator Cozinheiro Sistema / Processo 1. Obter ovos, azeite, frigideira, espátula, prato e um fogão. 2. Quebrar os ovos em um recipiente. 3. Acender uma das bocas do fogão. 4. Colocar a frigideira na boca acesa do fogão. 5. Adicionar um pouco de azeite na frigideira. 6. Adicionar os ovos da tigela na frigideira. 7. Soltar os ovos da frigideira após estarem fritos com a espátula. 8. Mover os ovos fritos para o prato com a espátula. Resultado Ovos fritos pronto para comer

Slide 16

Slide 16 text

Ator Cozinheiro Sistema / Processo 1. Obter ovos, azeite, frigideira, espátula, prato e um fogão. 2. Quebrar os ovos em um recipiente. 3. Acender uma das bocas do fogão. 4. Colocar a frigideira na boca acesa do fogão. 5. Adicionar um pouco de azeite na frigideira. 6. Adicionar os ovos da tigela na frigideira. 7. Soltar os ovos da frigideira após estarem fritos com a espátula. 8. Mover os ovos fritos para o prato com a espátula. Resultado Ovos fritos pronto para comer

Slide 17

Slide 17 text

Criar pedido Dados: customer_id, shipment_destination, payment_info, customer_contact_info, shipment_mechanism Fluxo de sucesso: 1. Balconista cria pedido com os dados acima. 2. Sistema valida todos os dados. 3. Sistema cria um pedido com um determinado order_id. 4. Sistema entrega o order_id ao balconista. Fluxo de falha: Erros de Validação 3. Sistema entrega mensagens de erro ao balconista.

Slide 18

Slide 18 text

Criar pedido Dados: customer_id, shipment_destination, payment_info, customer_contact_info, shipment_mechanism Fluxo de sucesso: 1. Balconista cria pedido com os dados acima. 2. Sistema valida todos os dados. 3. Sistema cria um pedido com um determinado order_id. 4. Sistema entrega o order_id ao balconista. Fluxo de falha: Erros de Validação 3. Sistema entrega mensagens de erro ao balconista. Processo: Uma sequência de ações/etapas para atingir um resultado.

Slide 19

Slide 19 text

Casos de uso == Processos https://study.com/academy/lesson/what-is-a-use-case-definition-examples.html

Slide 20

Slide 20 text

2010-2017 Dev Ruby "Normal" Minha história

Slide 21

Slide 21 text

Minha história 2010-2017 Dev Ruby "Normal" 2011-2012 SOLID

Slide 22

Slide 22 text

Minha história 2010-2017 Dev Ruby "Normal" 2011-2012 SOLID 2012-2016 Service objects (Railscast), interactor (gem), trailblazer (gem)

Slide 23

Slide 23 text

2017 Minha história

Slide 24

Slide 24 text

2017 Minha história https://elm-lang.org/

Slide 25

Slide 25 text

O que é uma função?

Slide 26

Slide 26 text

O que é uma função? É o mapeamento de uma entrada para uma saída.

Slide 27

Slide 27 text

O que é uma função? É o mapeamento de uma entrada para uma saída.

Slide 28

Slide 28 text

O que é uma função? É o mapeamento de uma entrada para uma saída. Exemplo: f(x) = x + 1

Slide 29

Slide 29 text

O que é uma função? É o mapeamento de uma entrada para uma saída. Exemplo: f(x) = x + 1 f(2) == 3

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

Nov/2017

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

https://dry-rb.org/gems/dry-transaction/0.13/

Slide 35

Slide 35 text

https://dry-rb.org/gems/dry-transaction/0.13/

Slide 36

Slide 36 text

https://dry-rb.org/gems/dry-transaction/0.13/

Slide 37

Slide 37 text

https://fsharpforfunandprofit.com/rop/

Slide 38

Slide 38 text

https://fsharpforfunandprofit.com/rop/

Slide 39

Slide 39 text

https://fsharpforfunandprofit.com/rop/

Slide 40

Slide 40 text

https://fsharpforfunandprofit.com/rop/

Slide 41

Slide 41 text

https://fsharpforfunandprofit.com/rop/

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

2017-2019 Minha história

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

"Most of the biggest problems in software are problems of misconception. — Rich Hickey (Criador da linguagem Clojure)

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

λ O poder do Functional First Development

Slide 57

Slide 57 text

"So much complexity in software comes from trying to make one thing do two things." — Ryan Singer

Slide 58

Slide 58 text

Functional First Development

Slide 59

Slide 59 text

First, code everything you can without using any side effects. Functional First Development

Slide 60

Slide 60 text

First, code everything you can without using any side effects. Then, code your side effects. Functional First Development

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

2019-2020 Minha história

Slide 64

Slide 64 text

Kind, Micro::Attributes, Micro::Case, Micro::Observers

Slide 65

Slide 65 text

kind Type System (at runtime) / Monads u-case u-attributes u-observers

Slide 66

Slide 66 text

kind Immutable/Value objects u-case u-attributes u-observers

Slide 67

Slide 67 text

kind Functional Objects / Use Cases u-case u-attributes u-observers

Slide 68

Slide 68 text

kind Observer pattern / pub/sub u-observers u-attributes u-case

Slide 69

Slide 69 text

Demo Photo by Denis Pavlovic on Unsplash

Slide 70

Slide 70 text

Kaizen Driven Development

Slide 71

Slide 71 text

Kaizen Driven Development

Slide 72

Slide 72 text

1. Comece com um bloco procedural enorme (vulgo tripa) em uma classe que herde de Micro::Case. 2. Crie um flow interno com then + métodos privados. 3. Repetição está clara? Isole os steps em cases e faça composição com then. Ex: then(MyCase). 4. Exitem flows bem definidos? Que tal compor eles como flows estáticos? Kaizen Driven Development

Slide 73

Slide 73 text

● Introdução a gem u-case https://serradura.github.io/pt-BR/blog/introducao-gem-u-case/ ● README pt-BR da u-case https://github.com/serradura/u-case/blob/main/README.pt-BR.md ● Dez/2019 - De service objects a use cases https://www.youtube.com/watch?v=ySNzVfmYy5 ● Fev/2020 - Entender para atender - Métodos que potencializam equipes de desenvolvimento https://www.youtube.com/watch?v=HiOhgO2loKQ Referências

Slide 74

Slide 74 text

https://serradura.github.io/pt-BR/

Slide 75

Slide 75 text

Obrigado @serradura [email protected]