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

Decorator & Presenter Design Pattern

Decorator & Presenter Design Pattern

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

DonSchado

May 21, 2014
Tweet

More Decks by DonSchado

Other Decks in Programming

Transcript

  1. DECORATOR & PRESENTER
    DESIGN PATTERN
    @DonSchado | 21.05.2014

    View full-size slide

  2. Because your controllers become bloated

    and logic begins to creep into your views (templates)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  6. 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?“

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. https://github.com/drapergem/draper
    Draper: View Models for Rails
    Draper adds an object-oriented layer of
    presentation logic to your Rails application

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. thx!(and have fun refactoring all the fat classes)

    View full-size slide