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

[RubyConfBR 2017] Refatorando Rails apps com confiança

Flavia Fortes
November 17, 2017
190

[RubyConfBR 2017] Refatorando Rails apps com confiança

Flavia Fortes

November 17, 2017
Tweet

Transcript

  1. Flavia Fortes

    View full-size slide

  2. ESTAMOS CONTRATANDO!
    http://careers.plataformatec.com.br

    View full-size slide

  3. Refatorando Rails apps com
    confiança

    View full-size slide

  4. 1. Quando fazer

    View full-size slide

  5. 1. Quando fazer
    2. O que não fazer

    View full-size slide

  6. 1. Quando fazer
    2. O que não fazer
    3. Um pouco do que fazer

    View full-size slide

  7. Quais as motivações?

    View full-size slide

  8. ● Melhorar design do código
    para facilitar adições e
    extensões

    View full-size slide

  9. ● Satisfação em deletar
    código

    View full-size slide

  10. Vida real
    ● Cobrança por entrega

    View full-size slide

  11. Vida real
    ● Cobrança por entrega
    ● Projeto com deadline

    View full-size slide

  12. Vida real
    ● Cobrança por entrega
    ● Projeto com deadline
    ● Bugs em produção

    View full-size slide

  13. Vida real
    ● Cobrança por entrega
    ● Projeto com deadline
    ● Bugs em produção
    ● Problemas de performance

    View full-size slide

  14. Refatoração reativa

    View full-size slide

  15. Impactos:
    ● Trabalhoso

    View full-size slide

  16. Impactos:
    ● Trabalhoso
    ● Demorado

    View full-size slide

  17. Impactos:
    ● Trabalhoso
    ● Demorado
    ● Difícil de testar

    View full-size slide

  18. Impactos:
    ● Trabalhoso
    ● Demorado
    ● Difícil de testar
    ● Pode não entregar valor
    para o usuário final

    View full-size slide

  19. Então, como evitar
    refatoração reativa?

    View full-size slide

  20. Refatorando sempre, aos
    poucos, ativamente.

    View full-size slide

  21. Quais são os sinais do
    dia-a-dia que me indicam
    quando eu preciso refatorar
    meu código?

    View full-size slide

  22. Métodos muito longos

    View full-size slide

  23. Métodos com muitos
    parâmetros

    View full-size slide

  24. Métodos que usam mais dados
    de outro objeto (Feature
    envy)

    View full-size slide

  25. O que costumamos fazer?

    View full-size slide

  26. Extraímos lógica para outros
    métodos menores

    View full-size slide

  27. Models gigantescos

    View full-size slide

  28. Muitos testes unitários, suite
    de testes cada vez maior.

    View full-size slide

  29. O que não costumamos fazer?

    View full-size slide

  30. Pensar nas nossas classes com
    poucos métodos públicos e
    muitos métodos privados.

    View full-size slide

  31. Pensar na nomenclatura da
    API pública das nossas classes
    com carinho.

    View full-size slide

  32. Código mais legível é menos
    complexo

    View full-size slide

  33. Classes gigantes

    View full-size slide

  34. Classes com muitas
    propriedades

    View full-size slide

  35. O que costumamos fazer?

    View full-size slide

  36. "Any application with an
    app/concerns is concerning."

    View full-size slide

  37. Composição > Herança

    View full-size slide

  38. Service Objects

    View full-size slide

  39. "The wrong object causes
    more trouble than no object
    at all." - Avdi Grimm

    View full-size slide

  40. Enough with the service objects
    already
    https://avdi.codes/service-objects/

    View full-size slide

  41. O que não costumamos fazer?

    View full-size slide

  42. Extrair classes ruby puras

    View full-size slide

  43. Classes de domínio
    !=
    Classes utilitárias

    View full-size slide

  44. Single Responsibility Principle

    View full-size slide

  45. "A class should do the
    smallest possible thing." -
    Sandi Metz

    View full-size slide

  46. Código complexo nas views

    View full-size slide

  47. O que costumamos fazer?

    View full-size slide

  48. Presenters (Decorators)

    View full-size slide

  49. "Cleaning up view code does
    not mean hiding it in another
    folder."

    View full-size slide

  50. Thoughts about Rails
    Presenters
    https://gist.github.com/somebox/5
    a7ebf56e3236372eec4

    View full-size slide

  51. YAGNI (You ain't gonna need it)
    ● think of better abstractions?
    ● consider different naming?
    ● maybe you just need a new model?

    View full-size slide

  52. Código duplicado

    View full-size slide

  53. DRY
    Don't Repeat Yourself

    View full-size slide

  54. Vale lembrar: Em testes,
    código duplicado não é
    necessariamente algo ruim!

    View full-size slide

  55. Alerta de polêmica:
    Comentários no código

    View full-size slide

  56. "Comments are always failures"
    - Robert C. Martin

    View full-size slide

  57. Comentários vs Documentação

    View full-size slide

  58. Queime seus ídolos.

    View full-size slide

  59. Código morto

    View full-size slide

  60. O que não costumamos fazer?

    View full-size slide

  61. Análise estática de código

    View full-size slide

  62. Evitar metaprogramação

    View full-size slide

  63. Teste complexo:

    View full-size slide

  64. Teste complexo:
    ● Setup muito grande

    View full-size slide

  65. Teste complexo:
    ● Setup muito grande
    ● Muitos stubs

    View full-size slide

  66. Recapitulando...

    View full-size slide

  67. Com refatorar melhor?

    View full-size slide

  68. Estar atento aos sinais (code
    smells).

    View full-size slide

  69. Hábito continuo.

    View full-size slide

  70. Exemplo: Tenho um projeto
    com uma classe User muito
    grande.

    View full-size slide

  71. Meta: Na próxima feature que
    envolver User, diminuir e não
    aumentar a classe User.

    View full-size slide

  72. Saber aplicação de design
    patterns
    !=
    Saber refatorar

    View full-size slide

  73. Pensamento crítico vale mais
    que qualquer técnica de
    refatoração ou Design Pattern
    vendido como bala de prata.

    View full-size slide

  74. "There is no refactoring that is always a
    great idea. You always have to say: is
    this worth it given the components of
    my system as they are?" - Ben Orenstein

    View full-size slide

  75. Quero saber mais sobre
    técnicas de refactoring...

    View full-size slide

  76. Fearless refactoring Rails
    Controllers
    http://rails-refactoring.com/

    View full-size slide

  77. Curso: Refactoring Rails - Ben
    Orenstein
    http://www.refactoringrails.io/

    View full-size slide