MVP——Model-Viewer-Presenter

本文介绍了MVP(Model-Viewer-Presenter)设计模式,一种源自MVC的变体,旨在提供更清晰的应用程序模型和视图之间的观察者连接。文章探讨了MVP的基本概念、组成部分及其在企业级应用中的优势,并提供了实际应用案例。
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 的话(其实关键是思想):
Postscript
MVC 模式几乎是人人都知道的,但 MVP 似乎知名度小得多,很少有人提及。其实 Martin Fowler 也 讲解 过该模式。虽然它创建之初是为了针对 C++ 和 Java 的,但在象 C #这样的语言中也一样可以应用它。使用 MVP 后,我们可以提高对 Model 和 Presenter 的复用,比如可以对 Model 和 Presenter 不做修改,而能提供 ASP.NET Web Form 和 Windows Form 。总之, MVP 是一个值得去研究的架构模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值