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

/MVCs?/ - The Missing Layer

/MVCs?/ - The Missing Layer

C11862c3c021d818e69a35f1ff6eda8d?s=128

Guilherme Carvalho

July 06, 2013
Tweet

Transcript

  1. /MVCs?/ Guilherme Carvalho segunda-feira, 8 de julho de 13

  2. 2006 segunda-feira, 8 de julho de 13

  3. Jamis Buck (37 Signals) Be aggressive! Try to keep your

    controller actions and views as slim as possible. http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model segunda-feira, 8 de julho de 13
  4. Jamis Buck (37 Signals) However, we can do better. There’s

    still a lot of noise in the view, mostly related to conditions and computations on the model objects. Let’s pull some of that into the model: Be aggressive! Try to keep your controller actions and views as slim as possible. http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model segunda-feira, 8 de julho de 13
  5. Dilemas Controladores Magros Modelos Gordos God Models 9 SRP Onde

    colocar a lógica? segunda-feira, 8 de julho de 13
  6. Lógica! •Três tipos, segundo Evans: •Lógica de aplicação •Lógica de

    domínio •Lógica de infraestrutura segunda-feira, 8 de julho de 13
  7. Modelos gordos •Última moda em 2006 •Desmascarado! segunda-feira, 8 de

    julho de 13
  8. Dilemas Se modelos também devem ser magros, para onde vai

    a lógica? Como resolvemos? segunda-feira, 8 de julho de 13
  9. Dilemas Se modelos também devem ser magros, para onde vai

    a lógica? Como resolvemos? SENTA A PEAA segunda-feira, 8 de julho de 13
  10. PEAA segunda-feira, 8 de julho de 13

  11. PEAA •Quatro padrões para resolver o dilema: •Transaction Script •Domain

    Model •Table Module •Service Layer segunda-feira, 8 de julho de 13
  12. Transaction Script Uma classe por transação Transações auto contidas Problemas?

    segunda-feira, 8 de julho de 13
  13. Domain Model Mistura dados e comportamento Modelos são interligados entre

    si Problemas? segunda-feira, 8 de julho de 13
  14. Table Module Mistura comportamento e dados sem noção de identidade

    W-T-F!? segunda-feira, 8 de julho de 13
  15. Service Layer Definem fronteiras com ações permitidas no sistema Várias

    interpretações Problemas? segunda-feira, 8 de julho de 13
  16. Domain Model + Service Layer = segunda-feira, 8 de julho

    de 13
  17. Domain Model + Service Layer = <3 <3 <3 <3

    <3 segunda-feira, 8 de julho de 13
  18. Services •Um tipo de service para cada lógica! •Application Services

    •Infrastructure Services •Domain Services segunda-feira, 8 de julho de 13
  19. Application Services Exportar CSV, XLS, PDF segunda-feira, 8 de julho

    de 13
  20. Infrastructure services Acessos a sistemas externos E-mail, sms, eventos... segunda-feira,

    8 de julho de 13
  21. Domain services Caso de uso que envolve múltiplos modelos CRUD

    NÃO! Problemas? segunda-feira, 8 de julho de 13
  22. Anemic Domain Model segunda-feira, 8 de julho de 13

  23. O que acontece quando o service fica grande? segunda-feira, 8

    de julho de 13
  24. Como organizar? segunda-feira, 8 de julho de 13

  25. Como organizar? segunda-feira, 8 de julho de 13

  26. Como organizar? segunda-feira, 8 de julho de 13

  27. Referências •http://blog.carbonfive.com/ 2012/01/10/does-my-rails-app- need-a-service-layer/ •PEAA •Domain-Driven Design segunda-feira, 8 de

    julho de 13
  28. Referências •http://blog.carbonfive.com/ 2012/01/10/does-my-rails-app- need-a-service-layer/ •PEAA •Domain-Driven Design segunda-feira, 8 de

    julho de 13
  29. Referências •http://blog.carbonfive.com/ 2012/01/10/does-my-rails-app- need-a-service-layer/ •PEAA •Domain-Driven Design segunda-feira, 8 de

    julho de 13
  30. Nova gem segunda-feira, 8 de julho de 13

  31. Nova gem Winterfell segunda-feira, 8 de julho de 13

  32. Uso require ‘winterfell’ Object.new.winter_is_coming? => true segunda-feira, 8 de julho

    de 13