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

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. Fat controllers Fat models + Skinny controllers Service Objects Interactors

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

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

    2010 2012 - 2014 2011 2009 Domain Objects Use cases
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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 ....
  11. Concerns (Fat model, skinny controller) Controller Model View Request Response

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

    https://github.com/serradura/from-fat-controllers-to-use-cases/commit/55769be6dae4f2e4d312a8973622ad86babc54e3
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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/