MVC基本模式的理解

2014/08/29 14:09
阅读数 58

以下内容参考了《精通Java Web整合开发(JSP+Ajax+Struts+Hibernate)》和《自己动手写Struts——构建基于MVC的Web开发框架》里面的内容。


概述


MVC模式,即模型-视图-控制器(MVC,Model-View-Control)是一种交互界面的结构组织模型。

模型(Model),代表的是应用的业务逻辑,包含应用程序的核心功能,它表示企业数据和业务规则。模型封装了应用程序的状态。在MVC模式中,模型要处理的任务很多,为了能使一个模型能给多个视图提供数据,那么要让模型与数据格式无关。

视图(View),应用的视图层,提供模型的表示。它是应用程序的界面,是用户能看到并与之交互的界面。在视图层中,没有发生真正的处理。视图层只是展示由模型提供数据的一种方式,因此,视图只能访问模型的读方法,而不能访问模型的写方法。视图对控制器一无所知,当改变模型时,视图应得到通知。

控制器(Control),提供应用的处理过程控制,控制器对用户的输入做出反应,它创建并设置模型。控制器相当于一个中转站,它本身不处理和输出任何数据。控制器的作用是从客户端接受请求,并且选择执行相应的业务逻辑,然后确定用哪个视图来显示模型处理返回的数据,从而把响应结果送回到客户端。



MVC模式的结构


用户提交的请求导致控制器改变模型或视图,或者同时改变模型或视图。一旦控制器改变了模型的数据,就会通知所有依赖的视图进行自动更新;从另一方面讲,只要控制器选择了相应的视图,视图就会从模型中获取数据来进行刷新。



MVC模式的设计思想


MVC模式的设计思想就是:把原来开发人员针对一个系统的输入、输出、处理流程编程的方式改变为按照模型层、视图层、控制层进行分解,从而使得整个系统责任明确、接口清晰,加快了开发流程。

1、 模型层

模型就是业务流程、状态处理及业务规则的制定。模型一般有两类:业务逻辑模型和数据模型。模型接受视图请求的数据,并返回最终的处理结果。业务流程的处理过程对另外两个层(View和Control)来说是封闭的。在MVC模式中,我们要把应用模型按一定的规则抽取出来,抽取的层次是关键,这也是判断开发人员是否优秀的依据。数据模型主要指实体对象的数据保存,即持久化。数据模型实现了对视图和模型之间交互的支持。实现把“做什么(业务处理)”和“怎么做(业务实体)”分离,这样就可以实现业务逻辑的重用。业务模型的设计是MVC最主要的核心部分。

2、 视图层

视图就是客户和系统进行交互的界面,作为视图来讲,它只是展示由模型提供的数据的一种方式。它可以是一个HTML页面或者是其它的方式等等。

在MVC设计模式中,视图仅限于处理视图上数据的采集和处理,以及用户的请求,不包括视图上业务流程的处理,业务流程的处理和状态的改变交给模型层处理。

3、 控制层

控制层就像一个中转站,它接受用户请求,并根据用户请求将模型与视图匹配在一起,共同完成用户的请求。控制层不做任何的数据处理,它就是一个分发器,选择什么样的模型以及视图,就可以完成什么样的用户请求。为了能够控制和协调每个用户跨越多个请求的处理,控制机制应该以集中的方式进行管理。用户提交一个表单或者点击一个链接,控制层在接受请求后,它本身并不处理业务信息,而是根据用户的请求类型,把用户的信息传递给相对应的模型,告诉模型做什么,等模型处理完毕后,再把模型处理后的数据选择符合要求的视图返回给用户。这样,一个模型就可能对应多个视图,一个视图可能对应多个模型。这样的话,我们可能会在控制层进行一些简单的数据转换等操作。

模型、视图与控制器之间的分工协作关系如下:

关系图说明如下:

模块名称

分工

协作

模型M

1、抽象系统应用的功能

2、封装系统的状态

3、提供使用系统功能的方法和路径

4、管理数据的存储和一致性

5、当数据发生变化时通知相关组件

1、当系统状态改变时通知视图

2、响应视图的状态查询

3、提供对控制器的操作途径

视图V

1、抽象数据表示

2、表示针对用户的数据

3、维护与模型的数据一致性

1、显示模型的数据

2、接收模型的数据更新通知更新视图

3、接受用户输入的数据传给控制器

控制C

1、抽象用户和系统的时间的语意映射

2、把用户输入映射到系统事件

3、根据用户输入和上下文情况选择合适的显示数据

1、接收用户请求

2、调用某个模型处理用户请求

3、 将处理结果送给某个视图进行显示

 

总结MVC的处理过程如下:

首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型的数据,并通过视图层展示给用户。



基于MVC的Web框架


一般情况下,实现一个基于MVC的Web框架示意图如下:

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部