1.3 MVC模式原理
MVC的英文全称是Model-View-Controller,即“模式-视图-控制器”。MVC模式起源于Smalltalk语言,它是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,MVC模式的结构由以下3个部分组成:模型(Model)、视图(View)和控制器(Controller)。MVC模式的结构图如图1.10所示。
图1.10 MVC模式的结构图
图1.10的意思是:不管是视图的改变还是模型的改变,或者控制器的改变,都会引起另外两个的改变,按照模型层、视图层、控制层进行分解,从而使得整个系统责任明确、接口清晰,加快了设计开发过程。下面分别来介绍这三个层次。
1.模型层
这里的模型就是指业务逻辑的处理和数据的存储,它分为两类模型:业务逻辑模型和数据模型。模型接收视图请求的数据,并返回最终的处理结果。这里之所以把模型层单独地抽取出来,是为了应对业务规则的变化,也是判断开发人员是否优秀的设计依据。MVC并没有提供模型的设计方法,而只告诉开发人员应该组织管理这些模型,以便于模型的重构和提高重用性。
数据模型就是指对数据的持久化,它实现了对视图和模型之间交互的支持。实现时把“做什么(业务处理)”和“怎么做(业务实体)”分离,这样可以实现业务逻辑的重用。对一个开发者来说,就可以专注于业务模型的设计。
2.视图层
视图层主要是用来展现用户所需要的数据,它是用户和系统进行交互的界面,这部分工作一般可以由美工人员来进行开发和维护,一般可以采用HTML页面、XML、Servlet和Applet等技术。
一般来说,视图只接收来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上业务流程的处理,业务流程的处理和状态的改变则交给模型层来处理。
视图部分的大致处理流程是:页面模板定义页面的布局,页面配置文件定义视图标签的具体内容,由页面布局策略类初始化并加载页面,每个用户部件根据自己的配置进行初始化,加载校验器并设置参数,以及事件的委托等,用户提交后,通过了表示层的校验,用户部件把数据自动提交给业务实体即模型。
3.控制层
控制层就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层就像一个中转站,它从用户那里接收请求,并根据用户的请求,将模型与视图匹配在一起,共同完成用户的请求。
在实现上,为了能够控制和协调每个用户跨越多个请求的处理,控制机制应该以集中的方式进行管理。用户提交一个表单或者单击一个链接,控制层接收请求后,它本身并不处理业务信息,而是根据用户的请求类型,把用户的信息传递给相对应的模型,告诉模型做什么,等模型处理完毕后,再把模型处理后的数据选择符合要求的视图返回给用户。
通过将模型、视图与控制器分离,使得一个模型可以对应多个视图,一个视图可能对应多个模型。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都应反映出这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。
模型、视图、控制器三者之间的关系和各自的主要功能,即它的功能示意图如图1.11所示。
图1.11 MVC模式的功能示意图
通过上面的讲解,可以得出MVC的处理过程:首先用户通过视图层发出请求,接着控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器将处理后的数据传递给视图层,并通过视图层展现给用户。