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 Slide

  2. WHY?

    View Slide

  3. Because your controllers become bloated

    and logic begins to creep into your views (templates)

    View Slide

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

    View Slide

  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.

    View Slide

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

    View Slide

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

    View Slide

  8. DECORATOR

    View Slide

  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)

    View Slide

  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

    View Slide

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

    View Slide

  12. View Slide

  13. View Slide

  14. View Slide

  15. PRESENTER

    View Slide

  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

    View Slide

  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.

    View Slide

  18. View Slide

  19. View Slide

  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:

    View Slide

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

    View Slide