Your SlideShare is downloading. ×
0
Presenting Presenters
        on Rails




                    new bamboo
The Problem
           Either:

Cluttering views with logic.

             or

View logic in business logic.




         ...
class UsersController
  def show
    @user = User.find(params[:id])
  end
end




<div>
  <% if CONFIG.date_format == :us ...
class UsersController
  def show
    @user = User.find(params[:id])

    if CONFIG.date_format == :us
      @user_signup_d...
Presenters

Model      Controller   View




                               new bamboo
Presenters

Model      Controller               View




                        Presenter




                           ...
class UserPresenter
  def initialize(user)
    @user = user
  end
  attr_reader :user

  def signup_date
    if CONFIG.dat...
class UsersController
  def show
    @user = User.find(params[:id])
    @user_presenter = UserPresenter.new(@user)
  end
e...
Disadvantages
• Contrived example
 • move the logic into the model
   • should the model really handle data
      represen...
@user_presenter.signup_date

              or

format_date(@user.created_at)




                                new bamboo
Disadvantages
• Accessibility for designers
 • it’s only a convention. Especially if the
    variables are suffixed with “p...
My Views on Presenters


• Overkill in most cases.
• Best used in applications, with a lot of
  configuration that governs ...
Conductors : the Anti-Presenter




 Model       Controller               View




                          Presenter


 ...
Conductors : the Anti-Presenter

         Conductor




 Model               Controller               View




           ...
Multiple Objects, One
        Form


                    new bamboo
Card
Company               Avatar
           Details




           Update




          User Form

                      ...
One Object, Multiple
     Forms


                       new bamboo
Company




                       Update




Information Form   Change Settings   Change Password


                     ...
Limitations


• Doesn’t handle has_many associations
 • quite trivial to implement


                                     ...
My Opinions of Conductors

• Extremely useful, in the right situations
 • connecting associated objects
 • DRY’s the contr...
Notable Mentions
• Blueprint CSS Framework
 • an easy, but pretty demo app
 • http://code.google.com/p/blueprintcss/
• Mod...
Upcoming SlideShare
Loading in...5
×

Presenting Presenters on Rails

3,508

Published on

Published in: Technology, Business
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,508
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
10
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Transcript of "Presenting Presenters on Rails"

  1. 1. Presenting Presenters on Rails new bamboo
  2. 2. The Problem Either: Cluttering views with logic. or View logic in business logic. new bamboo
  3. 3. class UsersController def show @user = User.find(params[:id]) end end <div> <% if CONFIG.date_format == :us %> <%= @user.created_at.strftime('%m/%d/%y') %> <% elsif CONFIG.date_format == :rest_of_the_world %> <%= @user.created_at.strftime('%d/%m/%y') %> <% end %> </div> new bamboo
  4. 4. class UsersController def show @user = User.find(params[:id]) if CONFIG.date_format == :us @user_signup_date = @user.created_at.strftime('%m/%d/%y') elsif CONFIG.date_format == :rest_of_the_world @user_signup_date = @user.created_at.strftime('%d/%m/%y') end end end <div> <%= @user_signup_date %> </div> new bamboo
  5. 5. Presenters Model Controller View new bamboo
  6. 6. Presenters Model Controller View Presenter new bamboo
  7. 7. class UserPresenter def initialize(user) @user = user end attr_reader :user def signup_date if CONFIG.date_format == :us self.user.created_at.strftime('%m/%d/%y') elsif CONFIG.date_format == :rest_of_the_world self.user.created_at.strftime('%d/%m/%y') end end end new bamboo
  8. 8. class UsersController def show @user = User.find(params[:id]) @user_presenter = UserPresenter.new(@user) end end <div> <%= @user_presenter.signup_date %> </div> new bamboo
  9. 9. Disadvantages • Contrived example • move the logic into the model • should the model really handle data representation • move the logic into a helper • helpers are ugly new bamboo
  10. 10. @user_presenter.signup_date or format_date(@user.created_at) new bamboo
  11. 11. Disadvantages • Accessibility for designers • it’s only a convention. Especially if the variables are suffixed with “presenter” for example. • Current templating language is Ruby anyway. • a presenter is just a view without angle brackets new bamboo
  12. 12. My Views on Presenters • Overkill in most cases. • Best used in applications, with a lot of configuration that governs the view. new bamboo
  13. 13. Conductors : the Anti-Presenter Model Controller View Presenter new bamboo
  14. 14. Conductors : the Anti-Presenter Conductor Model Controller View Presenter new bamboo
  15. 15. Multiple Objects, One Form new bamboo
  16. 16. Card Company Avatar Details Update User Form new bamboo
  17. 17. One Object, Multiple Forms new bamboo
  18. 18. Company Update Information Form Change Settings Change Password new bamboo
  19. 19. Limitations • Doesn’t handle has_many associations • quite trivial to implement new bamboo
  20. 20. My Opinions of Conductors • Extremely useful, in the right situations • connecting associated objects • DRY’s the controller code • Potential for abuse • probably not worth it if there is only one associated model new bamboo
  21. 21. Notable Mentions • Blueprint CSS Framework • an easy, but pretty demo app • http://code.google.com/p/blueprintcss/ • Model - Conductor - Controller (MMC) • heavyweight • http://mcc.rubyforge.org/svn/trunk/ new bamboo
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×