我所理解的MVC和MVP浅析

By | 2014年1月21日

这两天看一下MVP模式,与MVC模式很相似,但是2这之间却有不同,也来谈谈自己的一些理解。

关于MVC,讨论比较多就是生命周期,MVC内部结构以及MVC3个层之间的关系。
MVC的页面生命周期不同于asp.net页面的生命周期,把asp.net页面的生命周期比作是火车路线的话,那么事件就是这条线上的每一站。而MVC的感觉更像是超人变身的过程,每到一阶段都有特定组装(get Controller,Find Action 的过程),最终变身成功返回页面到客户端。这里有一篇关于MVC生命周期的好文章:Asp.net MVC生命周期

关于MVC的框架结构自己也在学习,推荐看蒋金楠的,自己也在看,里面讲的很细致,一次http请求过来,根据url如何找到controller,如何找到action,如何定位view讲解的非常详细,不过看之前需要一定的MVC基础,毕竟不是入门教材。

mvc
我所理解的MVC是
M: 所谓得Model
这个Model可能是数据库某个表的单个实体,也可以是集合,说白了就是页面要显示的数据,这个数据就是Model,因为View页面上只能访问到一个model变量。 而这个model不一定就对应数据库某个表的单个实体,一般习惯将数据库一个实体或者集合根据实际页面上需要显示的内容,创建一个ViewModel供View使用。比如说产品详细页,一般页面上要显示产片的所有详细信息,以及图片,可能还有加上部分会员信息,此时就可以创建一个ProductViewModel来包含页面必须要的显示信息,毕竟一个ProductViewModel总比同时传递一个Product以及User对象给View要好处理吧。 这个ProductViewModel就承担了一个将数据实体转换为页面实际用到的Model的作用。

V:就是视图
就是眼前能看到的页面,MVC模式有一个好处就是View可以在不改变 Controller以及Model的情况产生新的View,这就提供了多种页面展现形式。

C:控制层。
MVC中用于控制逻辑以及数据交互的重要组成部分。也是Model跟View之间重要的纽带。所有的请求都要经过Controller,根据实际情况想Model层获取数据并对应到具体的Action将数据返回个View.

新的模式:MVP Model-View-Presenter (模型-视图-提供器)。
MVP是有MVC演变来的,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller。
MVP之间的关系如图:
mvp
这里的View只负责展示界面,View不知道展示的数据是什么,View和Presenter之间通过接口通信,View实现接口所必要的方法或者事件,其余的全部交给Presenter,由Presenter跟Model交互。

MVP的优点
1、模型与视图完全分离,我们可以修改视图而不影响模型
2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部
3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

MVP的缺点:
增加了Prsenter的的负担。毕竟承担了所有逻辑以及控制。

为了更清晰的理解MVP, 蒋金楠的blog有一篇非常详细的文章:谈谈关于MVP模式中V-P交互问题
下图是我根据文章中的代码转换成了类图并分了层次:
MVP图解

说明:
1.部分类名做了调整。
2.右下角灰色部分为本人自己增加的部分,个人认为实际项目中需要增加的结构。

参考资料:
1.百度百科
2.尝试MVP模式

首发地址:http://www.yuanxj.net/2014/01/mvp/

发表评论