|
|
Model-view-controller Model view controller triad Model-View-Controller (MVC) is a software architecture that separates an application's data model, user interface, and control logic into three distinct components so that modifications to the view component can be made with minimal impact to the data model component. This is useful since models typically enjoy a fair degree of stability (owing to the stability of the domain being modeled), whereas user interface code usually undergoes frequent and sometimes dramatic change (owing to usability problems, the need to support growing classes of users, or simply the need to keep the application looking "fresh"). Separating the view from the model makes the model more robust, because the developer is less likely to "break" the model while reworking the view. The pattern was first described in 1979 by Trygve Reenskaug, then working on Smalltalk at Xerox research labs. Though MVC comes in different flavors, control flow generally works as follows: - user interacts with the user interface in some way (e.g., user presses a button)
- controller receives notification of the user action from the user interface objects
- controller accesses the model, possibly updating it in a way appropriate to the user's action (e.g., controller updates user's shopping cart)
- model notifies the view of changes, sometimes via the controller
- view uses the model to generate an appropriate user interface (e.g., view produces a screen listing the shopping cart contents). Note: In some implementations, the view does not have direct access to an external model -- instead, the controller pushes the data from the external model into the view.
- user interface waits for further user interactions, which begin the cycle anew.
In the design of web applications, MVC is also known as a "Model 2" architecture. Complex web applications continue to be more difficult to design than traditional applications, and MVC is being pushed as a potential solution to these difficulties. The MVC design also allows programs written in otherwise platform-specific languages to be almost completely platform-independent. Since the model and controller generally have no knowledge of the interface, the programmer is free to implement both in a cross-platform language such as C or C++. As a result, the hardest part of porting the application is redesigning the interface for the new operating system. The platform-specific language (such as Objective-C/Cocoa) is only used to notify the controller of user events and to respond to changes in the model. Theoretically, an application written entirely under the Cocoa framework for Macintosh could easily be ported to Windows under the .NET framework, as long as the model/controller is written only in C++. All that would have to be done is to redesign the interface in Visual Studio, and plug it into the existing model/controller, which is quite easy compared to the daunting task of rewriting the entire core of the program. Implementations See also External links
|
 |