decorator & presenter design pattern
DESCRIPTION
Decorator & Presenter Design PatternTRANSCRIPT
DECORATOR & PRESENTERDESIGN PATTERN
@DonSchado | 21.05.2014
WHY?
Because your controllers become bloated and logic begins to creep into your views (templates)
implement procedural helpers or adding view related bulk to your models?
Solutions?
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.
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.“
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?“
DECORATOR
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)
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
https://github.com/drapergem/draperDraper: View Models for Rails
Draper adds an object-oriented layer of presentation logic to your Rails application
PRESENTER
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-concernMVCP - Better Separation of Concern
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.
7 Patterns to Refactor Fat ActiveRecord Modelshttp://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:
thx! (and have fun refactoring all the fat classes)