Trygve Reenskaug writes a memo, A note on Dynabook requirements, that describes his design for a project management task. A couple of months later in another memo the Thing-Model-View-Editor metaphor is explored.
Trygve Reenskaug revamps TMVE into MVC in Models-Views-Controllers.
Developed independently from MVC by Joëlle Coutaz in: PAC, an Object Oriented Model for Dialog Design.
In an email response J. Coutaz said that:
when she formulated PAC, that she was unaware of MVC, and that she chose the word "control" independently. She later discovered MVC and was delighted to see the similarities, but also noted that her (independently coined) term "control" was similar to the term "controller" used with a very different meaning.All this was reported by Kyle Brown in Whats a Controller Anyway
Glenn E. Krasner and Stephen T. Pope published a variation of MVC in A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk-80.
An interface builder, written by Denison Bollay, that allows editing of the application at run time.
A highly recommended read about the history behind this tool and how it relates to other technologies is found here: Interface Builder's Alternative Lisp timeline
To me, Action! is one the “holy grail” items from the history of user interfaces, if not IT more generally.
NextSTEP is an object-oriented, multitasking operating system which was developed by NeXT Computer, Inc.
I started working with NeXTSTEP in '92, which was strongly modelled MVC; and delegation over inheritance for that matter.
NeXTstep was later modified to separate the underlying operating system from the higher-level object libraries. The result was the OpenStep API, a predecesor of Mac OS X and the Cocoa API.
Later renamed to Nexus to avoid confusion between the software and the World Wide Web; is the first web browser and editor.
Tim Berners Lee once commented that his pioneering World-Wide-Web application was only feasible at the time because of NeXTstep.
The first web site was published in 1990 and it is still online: The World Wide Web project
Used in VisualWorks, a dialect of Smalltalk sold by Cincom as part of Cincom Smalltalk.
Smalltalk an Introduction to Application Development Using VisualWorks (1995) is a book that provides a comprehensive description of the VisualWorks 2.0 development environment and its implementation of MVC.
Key features:
As Smalltalk developed in the 80's and 90's this led to some significant variations on the classic MVC model. Indeed one could almost say that MVC disappeared, if you consider the view/controller separation to be an essential part of MVC - which the name does imply.
Although the technique had been in use since the early days of MVC, it was first described in the book Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. The authors are often referred to as the Gang of Four (GoF).
In the 90's Microsoft loved "data binding" where UI controls were coupled to rows in database tables. To some this is the antithesis of MVC, and might be the primary reason Microsoft was late to the MVC party.
The 1995 Microsoft Access had a perfectly functional data binding capability. MS Access bound a record in a database table to the form showing it. Forms had next/previous ("<" and ">") controls. When those were interacted with the form would transition to the intended row in the table, with the data-bound fields in the form updating automatically. If the user had changed some fields in the form, before hitting next, they would be saved automatically too when next/prev was pressed. It was possible to veto the advancing of the form, but the data-bound nature of the form and the fields from a database attempted to be dominant. In the context of MVC, there was no intermediate model. The view (form) was wired directly to the database.
ActiveX had a data-binding technology called ActiveX Data Objects (ADO). Microsoft released ADO in October 1996.
MicroSoft launched .Net for public consupmtion in 2000. One facet of that was Active Data Objects (ADO.NET). Obviously that was taking ADO into the new .NET era. It very much continued the data-bound style, and UI technologies for .NET were also wired to it.
In 2003, Erik Dörnenburg wrote a technology called .NET Entity Objects Framework (NEO). He had worked with NeXTSTEP in '92, which was strongly modelled on MVC, and Enterprise Objects Framework (EOF) specifically, and wanted to bring some of that to .NET. He was also an Agile enthusiast, and wanted to have as much testable code as possible. He made Neo to help separate ADO.NET a little and allow some that testable, separative goodness. Neo as a persistence technology worked very well with WinForms.NET, at the time, It also had some other strong non-functional features but they are not important to this description. Erik later presented on this at a conference "Data programming beyond ADO.NET" in 2004 (see his old presentations page - scroll to the bottom), and some time after Microsoft bundled non data-binding technologies with .NET, but it could have been a coincidence. That started their patronage of the MVP sub-family of patterns.
MS being a patron of data-binding for many years might be one part of why they were so late to a proper implementation of MVC. Late being ASP.Net MVC in 2008.
First described by Mike Potel from Taligent Inc. in MVP: Model-View-Presenter, The Taligent Programming Model for C++ and Java
Dolphin, the Object Arts Ltd implementation of Smalltalk, used MVP as its UI model. The design is derived from the Taligent C++ system.
The research and reasonings behind that decision are found in a paper by Andy Bower and Blair McGlashan called: Twisting the Triad, published in 2000. In their research about MVC, they used VisualWorks 2.5 which actually refers to Application Model and in their paper both terms are used interchangeably.
A detailed timeline about Dolphin can be fount at: Ian's Dolphin Smalltalk Pages
A design pattern used in Java Web applications described in JavaServer Pages - Specification 0.92 (October 1998, if not before). A year later after release it was formally associated with MVC. The diagrams in the that link show a MVC-like design, but without calling it that explicitly.
When JavaServer Pages (JSP) as a template technology for Java was created, the initial reaction was “just like ASP”. It was also the case that the JSP page was the end point, with URLs ending in .jsp very common. Other technologies (Perl and alike) already had more abstracted ways of composing web applications, and something was needed for the Java servlet ecosystem.
"Model 2" mentioned in the 0.92 JSP spec, became influential amongst Java web developers as a better way to construct applications closer to the tenets of MVC. JavaWorld perhaps had the most sticky article of the time For some Java developers, this was the first time they had been exposed to MVC.
Later, the first big web framework in the Java community to embrace Model 2 wwould be Struts 1.0. Indeed, Struts was the poster child of Model 2 architecture.
In retrospect It was really only a small advance, but it heralded a shift away from each server-side generated page being its own thing, to pages being part of a larger design with a front-controller orchestrating. There is another writeup at Amero Publishing that seems to be an excerpt from a book of theirs.
Java's Swing was a full MVC thick-client library developed originally by Netscape in 1996 as "Internet Foundation Classes", and donated to Sun soon after. It was merged with other technologies and launched as Swing. Wikipedia has a good write up of the origins.
The technology sat on top of the existing "Abstract Window Toolkit" (AWT), and provided a comprehensive set of controls for cross-platform UI construction. Models and Views were extendable. Controllers pulled things together. Decomposition was easy. Views could update models without controller particpation. Models, Views and Controllers could be instantiated semi-independently, which was important for testing. Testing wasn't a core activity until JUnit 1.0 in 1997, though.
Struts 1 was an early Java web-framework in 2000 that honored the "Model 2" ideals. It had a lot of XML configuration.
Drupal is a content management framework and the core installation can serve as a simple web site, a single or multi-user blog, an Internet forum, or a community web site providing for user-generated content.
The framework has been around for a long time and different versions will reflect different MVC designs.
Drupal is very much a PAC architecture.
It is not certain which are differences between this pattern and MVP.
The pattern arranges model, adapter (mediating controller) and view linearly without any connections whatsoever directly between model and view.
The MVC design used by Cocoa implements the mediator pattern. The framework is well known for using MVA, however the documentation never uses that name, it is unclear who coined the name.
Giving so much responsibility to a singel object, the mediating controller, has been jokingly refered to as Massive View Controller.
Described by Martin Fowler in Development of Further Patterns of Enterprise Application Architecture
You must provide a synchronization mechanism between the Presentation Model and the View.
The communication can be set up in different ways:
JSF 1.x was based upon the same core ideas as Struts 1.0 but with a few twists:
- binding user actions to java method calls,
- an ecosystem of reusable UI components
Some people called it an improvement over Model 2 architecture, but at its core there was no fundamental difference. The request was intercepted by a front controller, which created the model, the model was used to access data, then the request was forwarded to a view that usually read from the model.
JSF went on to become a standard way of constructing Java web applications. Particularly the page decomposition aspects.
On the architectural level, all the inspiration came from the Java world and from Martin Fowler's Patterns of Enterprise Application Architecture. That book had just come out in January of 2003 as I started working on Rails in mid-2003. So it was immensely helpful.
So was learning from Struts 1.x, and I believe WebWork was around at the time as well. I basically studied all the Java frameworks available at the time, and while I was disgusted by the implementation of the ideas, the ideas themselves were powerful. The appropriation of MVC into a request/response context as one of those powerful ideas.
Rails heralded a convention over configuration era, and caused a seismic shift in the world of web-application development.
Described by John Gossman from Microsoft in his blog post: Introduction to Model/View/ViewModel pattern for building WPF apps. From the beginning it was compared to Presentation Model and later, in 2008, J. Gossman posted:
My opinion at this point is the Model-View-ViewModel pattern is a WPF-specific version of the PresentationModel pattern.
An interesting observation made about MVVM is that it maps quite well to PAC. You can read about that in: 100 Model/View/ViewModels of Mt. Fuji
MVVM Key features:
The ViewModel, though it sounds View-ish is really more Model-ish, and that means you can test it without awkward UI automation and interaction.
MVVM Issues:
Developed by Apple and claims to have kicked off the JS-MVC movement, its inspired by Cocoa.
AngularJS is a tool set for building the framework most suited to your application development. It is maintained by Google and the community.
Angular is not a framework, it's an HTML compiler
In 2012 Angular was declared a Model View Whatever library through a post made in the AngularJS G+ account. It wasn't a very formal declaration, but it helped the term to take off.
JavaScript library developed by Microsoft that uses the MVVM pattern. Some call it a data binding library and is not wrong since that is a key feature of MVVM.
Its an opinionated JavaScript framework that embraces the concept of convention over configuration.
It was originally being developed as SproutCore 2.0, but it changed course, the announcement:
Amber.js (formerly SproutCore 2.0) is now Ember.js
You can listen to some of the history in this panel discussion recorded at an Ember.js NYC meetup:
Fireside Chat with Ember Core Team Members, June 2013
It is the term used when a technology can't clearly be identified as MVP or MVVM.