Decorator & Presenter Design Pattern

Decorator & Presenter Design Pattern

Let have a short look at the Decorator & Presenter Design Pattern with the Draper Gem.

5b7ac75124cebf11ff0de894b365198e?s=128

DonSchado

May 21, 2014
Tweet

Transcript

  1. DECORATOR & PRESENTER DESIGN PATTERN @DonSchado | 21.05.2014

  2. WHY?

  3. Because your controllers become bloated and logic begins to creep

    into your views (templates)
  4. implement procedural helpers or adding view related bulk to your

    models? Solutions?
  5. implement procedural helpers or adding view related bulk to your

    models? Solutions? helpers are shit making fat models even fatter?
 No class should be fat. Ever.
  6. Why are helpers shit? http://nicksda.apotomo.de/2011/10/rails-misapprehensions-helpers-are-shit/ „all helpers are mixed into

    the view automatically (…) [and are] globally available“ „There is nothing wrong with having those little helpers in your view. What I don’t like is that they are called without an obvious receiver – they look and feel like functions. This is wrong.“
  7. Why are helpers shit? http://blog.steveklabnik.com/posts/2011-09-09-better-ruby-presenters „No seriously, helpers suck“ „Why

    is it in Ruby that everything is an object, even integers, yet as soon as we need to format a date, we all turn into Dijkstra and bust out structured programming?“
  8. DECORATOR

  9. Decorator pattern (also known as wrapper) is a design pattern

    that allows to dynamically add behavior to an individual object. can be used on it’s own or wrapped by decorator each decorator HAS_A (wraps) a component (holds a reference) (composition) (inheritance)
  10. The decorator wraps the model, and deals only with presentational

    concerns. In the controller, you decorate the article before handing it off to the view
  11. https://github.com/drapergem/draper Draper: View Models for Rails Draper adds an object-oriented

    layer of presentation logic to your Rails application
  12. None
  13. None
  14. None
  15. PRESENTER

  16. A presenter is a special case of the "Decorator design

    pattern". http://sokolmichael.com/posts/2012-01-14-model-view-controller-presenter-better-separation-of-concern MVCP - Better Separation of Concern
  17. http://blog.jayfields.com/2007/03/rails-presenter-pattern.html Presenter was inspired by the various GUI patterns documented

    by Martin Fowler. An architecture that uses the Presenter pattern provides view specific data as attributes of an instance of the Presenter. The Presenter's state is an aggregation of model and user entered data.
  18. None
  19. None
  20. 7 Patterns to Refactor Fat ActiveRecord Models http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/ Service Objects

    Value Objects Form Objects Query Objects View Objects Policy Objects Decorators further reading:
  21. thx!(and have fun refactoring all the fat classes)