http://www.runwithcode.com/ruby-on-rails-design-patterns-part-2/