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. De service objects
    a use cases
    Photo by Caleb Jones on Unsplash

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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.

    View full-size slide

  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 e
    que gerará um response
    model (o resultado) que
    determinará o output para o
    usuário.

    View full-size slide

  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.

    View full-size slide

  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.

    View full-size slide

  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.

    View full-size slide

  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.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  26. 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)

    View full-size slide

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

    View full-size slide

  28. Domain Objects
    Controller
    View
    Request
    Response
    https://github.com/serradura/from-fat-controllers-to-use-cases/commit/556a52d5acc233f3898cdf14f8862d847fe24d4f
    Domain objects
    Model

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  31. Demo
    Photo by Denis Pavlovic on Unsplash

    View full-size slide

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

    View full-size slide

  33. 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/

    View full-size slide

  34. https://martinfowler.com/articles/is-quality-worth-cost.html

    View full-size slide

  35. Micro::Case
    momento jabá

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  38. Obrigado
    @serradura
    [email protected]
    ~14 horas de dedicação
    para preparar esse conteúdo. ;)
    https://speakerdeck.com/serradura

    View full-size slide