I had a great time at Codestock this year. It wasn’t the pot-smoking, free-loving, mind-altering tribal experience I was afraid of and I didn’t see a single guitar the entire time – though I did talk with one guitar player.
The organizers – Michael Neel, Alan Stevens and Wally McClure — did a fantastic job and the Knoxville community is quite amazing and enthusiastic. I also got to meet many people I had previously only known by reputation.
I presented on “The Uses and Abuses of UI Design Patterns” on Saturday afternoon. I wanted to build out some examples of using a modified MV-VM pattern in WinForms and ASP.NET before publishing the code samples, but wanted to make sure I published out the references from the slide deck.
The point of the references is that while UI design patterns are all plagued by a tendency to have fuzzy boundaries – that is, it can be difficult to compare patterns between different technologies and sometimes can even be difficult to distinguish patterns used in one technology – there is still a paper trail on the Internet that give us clues as to where the design patterns (MVC, MVC Model 2, MVP, SVC, PV, PM, MVVM) came from and how they were originally intended to be used.
In general, the Supervising Controller and Passive View patterns are the best defined, while MVC is perhaps the least well defined. MV-VM, on the other hand, has some of the best examples on usage – not least because it is so tightly associated with WPF.
1988 – MVC: Journal of Object Oriented Programming Vol 1 Issue 3 http://portal.acm.org/citation.cfm?id=50759&dl=GUIDE&coll=GUIDE&CFID=41635617&CFTOKEN=20661505
1997-99 – MVC Model 2: Java Sun JSP Architecture http://java.sun.com/blueprints/guidelines/…/application_scenarios/index.html
2004 – MVP: Martin Fowler http://martinfowler.com/eaaDev/uiArchs.html
2004 – Presenter Model http://martinfowler.com/eaaDev/PresentationModel.html
2006 – Passive View and Supervising Controller: Martin Fowler http://martinfowler.com/eaaDev/ModelViewPresenter.html
2005-09 – MVVM: John Gossman http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx
MVVM: Josh Smith http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
An additional resource is this site http://c2.com/cgi/wiki?ModelViewControllerHistory from which we learn that the first MVC pattern can be attributed to Trygve Reenskaug sometime in the 70’s.
Perhaps the most authoritative source for the origins of the MVMV pattern, in turn, comes from the WPF MVVM toolkit (available on Codeplex) where we are told:
Model-View-ViewModel (MVVM) is a derivative of MVC that takes advantage of particular strengths of the Windows Presentation Foundation (WPF) architecture to separate the Model and the View by introducing an abstract layer between them: a “Model of the View,” or ViewModel. The origins of this pattern are obscure, but it probably derives from the Smalltalk ApplicationModel pattern, as does the PresentationModel pattern described by Martin Fowler. It was adapted for WPF use by the Expression team as they developed version 1 of Blend. Without the WPF-specific aspects, the Model-View-ViewModel pattern is identical with PresentationModel.