MVC思想概述

一、MVC思想概述

    MVC思想最早是由Trygve M.H.Reenskau提出,他是挪威的计算机专家,MVC是他在1979年访问施乐帕克研究中心期间提出的一种主要针对GUI应用的软件架构模式。

    MVC思想体现了“关注点分离”这一基本方针,它将一个人机交互的应用涉及的功能分为Model、Controller、View三部分,他们各自的职责如下。

  • Model是对应用状态和业务功能的封装,我们可以将它理解为同时包含数据和行为的领域模型(Domain Model),Model接收Controller的请求并完成相应的业务处理,在应用状态改变的时候可以向View发出相应的通知。
  • View实现可视化界面的呈现并最终捕获用户的交互操作(如鼠标、键盘操作);
  • View捕获到用户的交互操作后直接发给Controller,Controller完成相应的UI逻辑。如果需要涉及业务功能的调用,Controller会直接调用Model.在完成UI处理之后,Controller会更加需要控制原View或者创建新的View对用户交互操作予以响应。

    下图揭示了MVC模式下Model、View和Controller之间的交互。对于传统的MVC模式,很多人认为Controller仅仅是View和Model之间的中介,实则不然,View和Model存在直接的联系。View可以直接调用Model查询其状态信息。当Model状态发生改变的时候,它也可以直接通知View。比如在一个提供股票实时价位的应用中,维护股价信息的Model在股价变化的情况下可以直接通知相关的View改变其显示信息。
MVC思想概述

    从消息交换模式的角度来讲,Model针对View的状态通知和View针对Controller的用户交互通知都是单向的,我们推荐采用事件机制来实现这两种类型的通知。从设计模式的角度来讲就是采用观察者(Observer)模式通过注册/订阅的方式来实现它们,即View作为Model的观察者通过注册相应的事件来检测状态的改变,而Controller作为View的观察者通过注册相应的事件来处理用户的交互操作。

    我看到很多人将MVC和所谓的“三层架构”进行比较,其实两者并没有什么可比性,MVC更不是分别对应着UI、业务逻辑和数据存取三个层次,不过两者也不能说完全没有关系。Trygve M. H. Reenskau当时提出MVC的时候是将其作为构建整个GUI应用的架构模式,这种情况下的Model实际上维护着整个应用的状态并实现了所有的业务逻辑,所以它更多地体现为一个领域模型。

    对于多层架构来说(比如我们经常提及的三层架构),MVC是被当成UI呈现层(Presentation Layer)的设计模式,而Model则更多地体现为访问业务层的入口(Gateway)。如果采用面向服务的设计,业务功能被定义成相应服务并通过接口(契约)的形式暴露出来,这里的Model还可以表示成进行服务调用的代理。

    MVC有一些变体,以后我会单独写一篇文章来详细的说说MVC的变体,接下来我们说Web的发展历程,提出MVC是作为桌面应用的架构模式,不太适合Web本省的特性。对于Web的发展经历了Model1和Model2两个阶段(不管是Net还是Java).

二、Web端发展历程

1、Java Web Model1模式

    对于Java语言来说,在Model1模式下,整个Web应用几乎全部由JSP页面完成,JSP页面接口处理客户端的请求、对请求处理后做出响应,用少量的JavaBean来处理数据库连接、访问等操作。

    Model1模式的实现比较简单,适用于快速开发小规模项目,其局限性也非常明显:JSP页面身兼View与Contrller两种角色,将控制逻辑与表现逻辑混杂在一起,导致代码可重用性降低,增加了维护与扩展的难度

2、Java Web Model2模式

    Model2基于MVC架构,在Model2架构中,Servlet作为前段控制器,负责接收客户端的请求,在Servlet中只包含控制逻辑和简单的前段处理;然后调用后端的JavaBean来完成实际的逻辑处理;最后将其转发到相应的JSP页面来处理显示逻辑,实现方式如下图:

MVC思想概述

    在上图我们可以看到,在Model2模式下的JSP不再承担控制器的责任,它仅仅是一个表现层、JSP页面的请求与Servlet控制器交互,Servlet负责与后端的数据库交互;在Model模式下,Model由JavaBean充当、视图由JSP页面充当、控制器由Servlet充当。

3、Java Web端开发历程图
MVC思想概述

4、Net Web Model1模式

    对于Net语言来时,早期的ASP以及后来的ASP.NET都可以说是Model1模式,整个Web应用几乎全部由ASP或者ASPX页面完成,ASP或者ASPX页面接口处理客户端的请求、对请求处理后做出响应(微软通过ViewState和PostBack对HTTP请求与相应封装,使得我们可以先编写WinForm应用一样采用事件驱动的方式进行ASP.NET Web Forms应用的编程).

5、Net Web Model2模式

    ASP.NET MVC是基于Model2设计的,对HTTP请求进行拦截以实现对目标Controller和Action名称的解析时通过一个自定义的HttpModule来实现的,目标Controller的**和Action方法的执行则通过一个自定义的HttpHandler来完成。(在此说明ASP.NET MVC中的model仅仅是绑定到View上的数据,与MVC模式中的Model不是一回事,由于ASP.NET MVC中的model服务与view,所以也可以将其称为View Model).

ASP.NET MVC流程说明图

MVC思想概述

6、Net Web端开发历程图
MVC思想概述

参考:ASP.NET MVC5框架揭秘、Spring+MyBaits企业应用实战


MVC思想概述
个人微信公众号,欢迎大家关注。