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

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. @serradura rodrigo.serradura@gmail.com

  3. None
  4. Agenda - A estória que levou ao u-case - Railway

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

  6. Minha história

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

    mapeador de processos...)
  8. O que é um processo?

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

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

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

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

  13. O que é um caso de uso?

  14. Caso de uso: É uma descrição de como uma pessoa

    usa um processo ou sistema para alcançar um objetivo (resultado).
  15. 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
  16. 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
  17. 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.
  18. 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.
  19. Casos de uso == Processos https://study.com/academy/lesson/what-is-a-use-case-definition-examples.html

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

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

  22. Minha história 2010-2017 Dev Ruby "Normal" 2011-2012 SOLID 2012-2016 Service

    objects (Railscast), interactor (gem), trailblazer (gem)
  23. 2017 Minha história

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

  25. O que é uma função?

  26. O que é uma função? É o mapeamento de uma

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

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

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

    entrada para uma saída. Exemplo: f(x) = x + 1 f(2) == 3
  30. None
  31. None
  32. Nov/2017

  33. None
  34. https://dry-rb.org/gems/dry-transaction/0.13/

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

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

  37. https://fsharpforfunandprofit.com/rop/

  38. https://fsharpforfunandprofit.com/rop/

  39. https://fsharpforfunandprofit.com/rop/

  40. https://fsharpforfunandprofit.com/rop/

  41. https://fsharpforfunandprofit.com/rop/

  42. None
  43. None
  44. None
  45. 2017-2019 Minha história

  46. None
  47. None
  48. None
  49. None
  50. None
  51. None
  52. "Most of the biggest problems in software are problems of

    misconception. — Rich Hickey (Criador da linguagem Clojure)
  53. None
  54. None
  55. None
  56. λ O poder do Functional First Development

  57. "So much complexity in software comes from trying to make

    one thing do two things." — Ryan Singer
  58. Functional First Development

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

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

    Then, code your side effects. Functional First Development
  61. None
  62. None
  63. 2019-2020 Minha história

  64. Kind, Micro::Attributes, Micro::Case, Micro::Observers

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

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

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

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

  69. Demo Photo by Denis Pavlovic on Unsplash

  70. Kaizen Driven Development

  71. Kaizen Driven Development

  72. 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
  73. • 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
  74. https://serradura.github.io/pt-BR/

  75. Obrigado @serradura rodrigo.serradura@gmail.com