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

Not Invented Here: Things Rails Didn't Innovate

Not Invented Here: Things Rails Didn't Innovate

Rails is a mixture of design patterns, practices, and magic. In this talk, we'll explore how Rails embraces ideas from other frameworks and projects.

Active Record was born of Martin Fowler. MVC was the brainchild of Trygve Reenskaug. Rails 3 completely absorbed the Merb project, gaining modularity and extensibility that it previously lacked.

We all learn by standing on the shoulders of giants, even Rails. By understanding the inception of design patterns, we are more likely to be able to create ideas of our own. This helps us to not only grow in our own ability, but to help others improve as well.

Video of the talk at Scottish Ruby Conf: http://programme2014.scottishrubyconference.com/proposals/5/video

Caleb Hearth

May 12, 2014
Tweet

More Decks by Caleb Hearth

Other Decks in Programming

Transcript

  1. Model View Controller was conceived as a general solution to

    the problem of developers controlling a large and complex data set.
  2. The essential purpose of MVC is to bridge the gap

    between the human user's mental model and the digital model that exists in the computer. Trygve Reenscrag XEROX PARC 1978-79
  3. An object that wraps a row in a database table

    or view, encapsulates the database access, and adds domain logic on that data. Martin Fowler Patterns of Enterprise Application Architecture (November 15, 2002)
  4. This idealized model of the interactions within an overall Web

    application… became the foundation for the modern Web architecture Roy T. Fielding and Richard N. Taylor Principled Design of the Modern Web Architecture (2002)
  5. Convention over Configuration seeks to decrease the number of decisions

    that developers need to make, gaining simplicity, but not necessarily losing flexibility.
  6. Merb • asset pipeline • extension api • parameter whitelisting

    and blacklisting (strong_parameters) • ORM / JavaScript agnostic