Decorator & Presenter Design Pattern

Preview:

DESCRIPTION

Decorator & Presenter Design Pattern

Citation preview

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)

Recommended