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

u-case: Casos de uso em Ruby. Entenda na prática o poder do railway oriented programming - Rodrigo Serradura

u-case: Casos de uso em Ruby. Entenda na prática o poder do railway oriented programming - Rodrigo Serradura

Gravação: https://youtu.be/rtyZ8K58MbU?t=6830

Código produzido no live coding: https://github.com/serradura/railway_oriented_programming_em_ruby

Referências:

1. Introdução a gem u-case
https://serradura.github.io/pt-BR/blog/introducao-gem-u-case/

2. README pt-BR da u-case
https://github.com/serradura/u-case/blob/main/README.pt-BR.md

3. De service objects a use cases
https://www.youtube.com/watch?v=ySNzVfmYy5

4. Entender para atender - Métodos que potencializam equipes de desenvolvimento
https://www.youtube.com/watch?v=HiOhgO2loKQ

Rodrigo Serradura

November 25, 2020
Tweet

More Decks by Rodrigo Serradura

Other Decks in Programming

Transcript

  1. Casos de uso em Ruby Entenda na prática o poder

    do railway oriented programming com u-case Photo by Sunyu Kim on Unsplash
  2. Agenda - A estória que levou ao u-case - Railway

    Oriented Programming em Ruby - Aplicando u-case na prática numa aplicação Rails
  3. Caso de uso: É uma descrição de como uma pessoa

    usa um processo ou sistema para alcançar um objetivo (resultado).
  4. 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
  5. 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
  6. 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.
  7. 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.
  8. Minha história 2010-2017 Dev Ruby "Normal" 2011-2012 SOLID 2012-2016 Service

    objects (Railscast), interactor (gem), trailblazer (gem)
  9. O que é uma função? É o mapeamento de uma

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

    entrada para uma saída. Exemplo: f(x) = x + 1 f(2) == 3
  11. "Most of the biggest problems in software are problems of

    misconception. — Rich Hickey (Criador da linguagem Clojure)
  12. "So much complexity in software comes from trying to make

    one thing do two things." — Ryan Singer
  13. First, code everything you can without using any side effects.

    Then, code your side effects. Functional First Development
  14. 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
  15. • 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