MVP
——
Model-Viewer-Presenter
Introduction
这里的
MVP
不是微软的那个
MVP
,而是一个设计模式
Model-Viewer-Presenter
。最早(
2000
年)由
IBM
开发出来的一个针对
C++
和
Java
的编程模型,它是
MVC
模式的变种。其目的就在于提供
a cleaner implementation of the Observer connection between Application Model and view
。
MVP
在企业应用中,对用户有用的是各种数据,他们通过
UI
以各种不同的方式管理这些数据。对于开发者而言,需要给用户提供各种
UI
,通过响应用户操作
UI
时触发的各种
Event
来执行一定的业务逻辑,从而操控数据,数据变化后还需要更新显示,给用户予以提示。
UI
是容易变化的,且是多样的,一样的数据会有
N
种显示方式;业务逻辑也是比较容易变化的。为了使得
Application
具有较大的弹性,我们期望将
UI
、逻辑(
UI
的逻辑和业务逻辑)和数据隔离开来,而
MVP
是一个很好的选择。
Model
和
MVC
中的
Model
是一样的含义——
The Domain Data
,包括
Selection
和
Command
。
图:


Viewer
呈现
Model
,且处理
UI
的事件(
Handle UI Event
)。
Presenter
代替了
Controller
,它比
Controller
担当更多的任务,也更加复杂。
Presenter
处理事件,执行相应的逻辑,这些逻辑映射到
Model
的
Command
以操作
Model
。那些处理
UI
如何工作的代码基本上都位于
Presenter
。
Presenter
如同一个乐队的指挥家,表现和协调整个
Application
,它负责创建和协调其它对象。
Model
和
View
使用
Observer
模式进行沟通;而
Presenter
和
View
则使用
Mediator
模式进行通信;
Presenter
操作
Model
则使用
Command
模式来进行。从上面我给的链接
MVP
中可以找到讲解
MVP
的
PDF
文件,该文档中详细说明了
MVP
的设计思想。
如果想知道
MVC
和
MVP
有什么不同,那可以看
这里
。
Example
光看理论还不能掌握一个架构模式,得看看实际的例子才行,我在
codeproject
上发现一篇不错的文章《
Model View Presenter with ASP.NET
》,作者指出了
ASP.NET
的
code-behind
编程模型的各种缺点,然后讲解了如何将
MVP
应用到
ASP.NET Application
中,而无须使用复杂的
Framework
。
更多的例子:
如果不介意看
smalltalk
的话(其实关键是思想):
另外还有一个
Jean-Paul
的
TV
。
http://weblogs.asp.net/bsimser/archive/2006/07/18/Model_2D00_View_2D00_Presenter-Pattern-with-SharePoint-Web-Parts.aspx
http://weblogs.asp.net/bsimser/archive/2006/07/18/Model_2D00_View_2D00_Presenter-Pattern-with-SharePoint-Web-Parts.aspx
Postscript
MVC
模式几乎是人人都知道的,但
MVP
似乎知名度小得多,很少有人提及。其实
Martin Fowler
也
讲解
过该模式。虽然它创建之初是为了针对
C++
和
Java
的,但在象
C
#这样的语言中也一样可以应用它。使用
MVP
后,我们可以提高对
Model
和
Presenter
的复用,比如可以对
Model
和
Presenter
不做修改,而能提供
ASP.NET Web Form
和
Windows Form
。总之,
MVP
是一个值得去研究的架构模式。
本文介绍了MVP(Model-Viewer-Presenter)设计模式,一种源自MVC的变体,旨在提供更清晰的应用程序模型和视图之间的观察者连接。文章探讨了MVP的基本概念、组成部分及其在企业级应用中的优势,并提供了实际应用案例。

7131

被折叠的 条评论
为什么被折叠?



