在我工作中经常需要处理一些由于开发人员没能很清楚地理解MVC和MVP模式的区别的情况下使用它们而产生的问题。在这篇文章中我将会阐述一下我对两者之间区别的一些理解。 这两种模式中三个部分的一般理解1、模型(Model)表示数据模型和业务逻辑(business logic)。模型并不总是DataSet,DataTable之类的东西,它代表着一类组件(components)或类(class),这些组件或类可以向外部提供数据,同时也能从外部获取数据并将这些数据存储在某个地方。简单的理解,可以把模型想象成“外观类(facade class)”。【译注:这里的外观是指“外观模式”中所说的外观。外观的一般作用是为一个复杂的子系统提供高层次的简单易用的访问接口,可以参看下面的图来理解它的原理: MVC/P模式的核心是为了将模型从视图/控制器中分离出来,从而使得模型独立于它们,因此模型不包含对视图和控制的引用。 什么是MVC(Model View Presenter)模式?1、为了使得视图接口可以与模型和控制器进行交互,控制器执行一些初始化事件 这一模式的有一下几个要点: “主动—MVC”模式,也是通常意义下的MVC模式 “被动—MVC”模式 MVP模式 与“被动—MVC模式”很接近,区别在于“视图并不使用模型”。在MVP模式中视图和模型是完全分离的,他们通过Presenter进行交互。Presenter与控制器非常相似,但是它们也有一些的区别: 1、Presenter处理视图发送过来的用户操作(在MVC中视图自己处理了这些操作) 2、它用更新过的数据去更新模型(在被动MVC中控制器只是通知视图去更新过的模型中去取新的数据,而主动MVC中模型通知视图去更新显示,控制器不需要做工作) 3、检查模型的更新(与被动MVC一样) 4、(与MVC的主要区别)从模型中取数据然后将它们发送到视图中 5、(与MVC的主要区别)将所做的更新告知视图 6、(与MVC的区别)用Presenter渲染视图 MVP的优势1、模型与视图完全分离,我们可以修改视图而不影响模型 MVP的问题由于对视图的渲染放在了Presenter中,所以视图和Persenter的交互会过于频繁。 还有一点你需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。比如说,原本用来呈现Html的Presenter现在也需要用于呈现Pdf了,那么视图很有可能也需要变更。 |
|
来自: 空城66 > 《mvc与mvp的区别》