MVC was originally developed to map the traditional input, processing, output roles into the GUI realm:
Input --> Processing --> Output
Controller --> Model --> View [Dean98]
如图示:[Trygver03]
较详细的描述:[DEA2e03]
A model represents business data and business logic or operations that govern access and modification of this business data. Often the model serves as a software approximation to real-world functionality. The model notifies views when it changes and provides the ability for the view to query the model about its state. It also provides the ability for the controller to access application functionality encapsulated by the model. A view renders the contents of a model. It accesses data from the model and specifies how that data should be presented. It updates data presentation when the model changes. A view also forwards user input to a controller. A controller defines application behavior. It dispatches user requests and selects views for presentation. It interprets user inputs and maps them into actions to be performed by the model. In a stand-alone GUI client, user inputs include button clicks and menu selections. In a Web application, they are HTTP GET and POST requests to the Web tier. A controller selects the next view to display based on the user interactions and the outcome of the model operations. An application typically has one controller for each set of related functionality. Some applications use a separate controller for each client type, because view interaction and selection often vary between client types. 如图示:
也可参见[Steve97]对MVC的定义。
Summary:
OOP中对Model的查询和对Model的状态的改变是区分开的。 Model可以在DB建模后就完成了。 Model的状态的查询、改变方法都是由Model自己提供的。Model是被动的。 对Model状态的查询由View来主动 对Model状态的改变由Controller来主动 References:
[Dean98] http://ootips.org/mvc-pattern.html [Trygver03] http://heim.ifi.uio.no/~trygver/2003/javazone-jaoo/MVC_pattern.pdf [Steve97] http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html [DEA2e03] http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/app-arch/app-arch2.htm