🌱Ian's Digital Garden

History of Model-View-Controller (MVC)


👤Trygve Reenskaug invented model-view-controller, but claims his vision was different from the one that was implemented in Smalltalk-80. It's through the latter that we got modern MVC so Trygve's perspective isn't talked about much anymore.

I'm interested in and appreciative of both versions. This page tries to gather the key resources and writing involved in order to serve as a base for more subjective discussion elsewhere.



Smalltalk-80 / Modern MVC

In the MVC paradigm the user input, the modeling of the external world, and the visual feedback to the user are explicitly separated and handled by three types of object, each specialized for its task. The view manages the graphical and/or textual output to the portion of the bitmapped display that is allocated to its application. The controller interprets the mouse and keyboard inputs from the user, commanding the model and/or the view to change as appropriate. Finally, the model manages the behavior and data of the application domain, responds to requests for information about its state (usually from the view), and responds to instructions to change state (usually from the controller).

Trygve MVC

One result of this endeavour was the Model-View-Controller architecture that I developed as a visiting scientist at Xerox PARC in 1978/79. Its purpose was to bridge the gap between the user’s mind and the computer held data. The centre of this solution was the Model that was a representation of the user’s domain information. The View was an editor that enabled the user to inspect and modify this information. The Controller coordinated the capabilities of several Views making it a comprehensive tool that the user applied in the performance of specific tasks.

The original MVC was later modified in Smalltalk-80 to become a technical solution that separated input, output and information. The most important participant in the original MVC architecture, the user’s mind, was somehow forgotten.

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. The ideal MVC solution supports the user illusion of seeing and manipulating the domain information directly. The structure is useful if the user needs to see the same model element simultaneously in different contexts and/or from different viewpoints.


More Relevant Documents


I first heard about the different strains of MVC from 👤Manuel J. Simoni, thank you!