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

De Fat controllers a Use cases

De Fat controllers a Use cases

Google slides: https://docs.google.com/presentation/d/1bRYoDVn7S9JawcK7ycQhv6LggTLnb-tQMRWhtXMXpWc/edit?usp=sharing

Já se deparou com essas perguntas:
1. Como refletir regras de negócios em uma aplicação Rails?
2. Como garantir que um padrão de dev seja facilmente absorvido e mantido pelo time?

Todo time de dev, empresa de tecnologia precisa equilibrar a relação entre qualidade e velocidade em prol das entregas.
E infelizmente, é muito comum muitos sacrificarem qualidade porque o time investiu tempo estruturando o projeto mas perdeu o prazo da entrega, e por conta disso passou a fazer do jeito que dá e então começou a perder o prazo novamente por conta do codebase virar uma zona.

Dado o contexto acima, gostaria de compartilhar com vocês a importância de se entender os casos de uso da sua empresa/produto e como implementá-los de maneira prática e padronizada.
E porque service objects podem se tornar um problema em suas aplicações da sua natureza generalista (é muito comum ouvir: se não vai na model, controller... adiciona em um service object!).

Tópicos que serão abordados:
- Fat controllers & Fat models
- Service Objects
- Domain objects
- Use cases
- Abstrações existente na comunidade:
- Interactor
- Micro::Case (https://github.com/serradura/u-case)
- Como estruturar aplicações Rails fazendo uso desses conceitos.

Rodrigo Serradura

December 07, 2019
Tweet

More Decks by Rodrigo Serradura

Other Decks in Programming

Transcript

  1. De service objects a use cases Photo by Caleb Jones

    on Unsplash
  2. De service objects a use cases Photo by Caleb Jones

    on Unsplash
  3. De fat controllers a use cases Photo by Caleb Jones

    on Unsplash
  4. @serradura rodrigo.serradura@gmail.com

  5. Objetivo

  6. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    Domain Objects Use cases 2010 2012 - 2014
  7. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2009 Domain Objects Use cases
  8. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases
  9. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases
  10. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases
  11. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases Request model é o input que acionará um caso de uso e que gerará um response model (o resultado) que determinará o output para o usuário.
  12. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases Request model é o input que acionará um caso de uso e que gerará um response model (o resultado) que determinará o output para o usuário.
  13. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases Request model é o input que acionará um caso de uso e que gerará um response model (o resultado) que determinará o output para o usuário.
  14. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases Request model é o input que acionará um caso de uso e que gerará um response model (o resultado) que determinará o output para o usuário.
  15. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases Request model é o input que acionará um caso de uso e que gerará um response model (o resultado) que determinará o output para o usuário.
  16. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases Request model é o input que acionará um caso de uso e que gerará um response model (o resultado) que determinará o output para o usuário.
  17. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    2010 2012 - 2014 2011 2009 Domain Objects Use cases Request model é o input que acionará um caso de uso ....
  18. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    Domain Objects Use cases 2010 2012 - 2014
  19. https://github.com/serradura/from-fat-controllers-to-use-cases

  20. https://github.com/serradura/from-fat-controllers-to-use-cases

  21. https://github.com/serradura/from-fat-controllers-to-use-cases

  22. Fat controller Request Controller Model View Response https://github.com/serradura/from-fat-controllers-to-use-cases/commit/99c0e34a6f064305975184d0c2a06b65fd7f52a0

  23. Fat model, skinny controller Controller Model View Request Response https://github.com/serradura/from-fat-controllers-to-use-cases/commit/10382990108f37017c1de9effe0184c2e0380dad

  24. Concerns (Fat model, skinny controller) Controller Model View Request Response

    https://github.com/serradura/from-fat-controllers-to-use-cases/commit/55769be6dae4f2e4d312a8973622ad86babc54e3
  25. Concerns (Fat model, skinny controller) Controller Model View Request Response

    https://github.com/serradura/from-fat-controllers-to-use-cases/commit/55769be6dae4f2e4d312a8973622ad86babc54e3
  26. Service Objects Controller View Request Response https://github.com/serradura/from-fat-controllers-to-use-cases/commit/0789d32007311334c00d9aff311add0f7e5304fa Model Service Objects

  27. Service Objects com herança (excesso) Controller View Request Response https://github.com/serradura/from-fat-controllers-to-use-cases/commit/97e8105fa464474b5dd590e067dc7ba388f3c5f8

    https://github.com/serradura/from-fat-controllers-to-use-cases/commit/17a90c28ea14e0131e6477c016c500701492a247 Model Service Objects
  28. Interactors Controller View Request Response https://github.com/serradura/from-fat-controllers-to-use-cases/commit/4cc47150115e8230da0daf76e96ef5ade7e02d0f Model Interactors & Organizers

    (Service Objects) .call result Contrato (padrão)
  29. Interactors Controller View Request Response Model Interactors & Organizers (Service

    Objects) .call result Contrato (padrão) https://github.com/serradura/from-fat-controllers-to-use-cases/commit/4cc47150115e8230da0daf76e96ef5ade7e02d0f
  30. Domain Objects Controller View Request Response https://github.com/serradura/from-fat-controllers-to-use-cases/commit/556a52d5acc233f3898cdf14f8862d847fe24d4f Domain objects Model

  31. Use Cases Controller View Request Response Model Use case Domain

    Objects https://github.com/serradura/from-fat-controllers-to-use-cases/commit/07cb885c6f2fb43504a1f200a2fe76771882fb2f https://github.com/serradura/from-fat-controllers-to-use-cases/commit/e6827057e46436bc394a96613017e7a01204e3a6
  32. Use Cases Controller View Request Response Model Use case Domain

    Objects https://github.com/serradura/from-fat-controllers-to-use-cases/commit/07cb885c6f2fb43504a1f200a2fe76771882fb2f https://github.com/serradura/from-fat-controllers-to-use-cases/commit/e6827057e46436bc394a96613017e7a01204e3a6
  33. Demo Photo by Denis Pavlovic on Unsplash

  34. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    Domain Objects Use cases
  35. Fat controllers Fat models + Skinny controllers Service Objects Interactors

    Domain Objects Use cases Melhor ou pior é relativo, mas a ideia é reduzir a métrica acima! https://www.osnews.com/story/19266/wtfsm/
  36. https://martinfowler.com/articles/is-quality-worth-cost.html

  37. Micro::Case momento jabá

  38. https://github.com/serradura/u-case

  39. https://github.com/serradura/u-case

  40. Obrigado @serradura rodrigo.serradura@gmail.com ~14 horas de dedicação para preparar esse

    conteúdo. ;) https://speakerdeck.com/serradura