Model-View-Presenter(MVP)模式(一)

  Model-View-Presenter(MVP)是一种应用程序表示层的设计模式。该设计模式最早于90年代由Taligent提出,并率先在C++和Java中推广开来。在MVP模式中,视图层(View)和模型层(Model)被巧妙地分离开来,视图层提供一个给表示层(Presenter)调用的接口,通过该接口,表示层(Presenter)能够与依赖系统其它部分的视图元素进行交互。

  在MVP模式中,Model负责实现业务逻辑,保存数据,状态信息,Model仅仅向Presenter提供一组服务接口,隐藏了内部实现的细节;View负责与用户交互,它接收用户的操作、输入信息,与Presenter交互获得数据,展示给用户;Presenter是View和Model的中间层,它接收来自View的输入,并将其传递给Model,然后依据处理结果更新View。下图演示了Model,View,Presenter三者的交互逻辑。

  MVP模式自90年代提出以来,已经在软件工程领域引起了广泛的讨论。Martin Fowler在自己的论文和著作中,介绍了一些MVP模式的实现方法,但是很少人能够在具体的程序中使用MVP模式,实现MVP模式这一过程很大程度上依赖于开发者的个人经验。

  与传统的表示层相比,MVP模式下表示层的优势体现在下面三个方面:

  (1)View与Model完全隔离。得益于此,Model和View之间具有良好的松耦合设计,这意味着,如果Model或View中的一方发生变化,只要交互接口不变,另一方就没必要对上述变化做出改变。这使得Model层的业务逻辑具有很好的灵活性和可重用性。

  (2)Presenter与View的具体实现技术无关。也就是说,采用诸如Windows表单,WPF,Web表单等用户界面构建技术中的任意一种来实现View层,都无需改变系统的其他部分。甚至为了使B/S,C/S部署架构能够被同时支持,应用程序可以用同一个Model层适配多种技术构建的View层。

  (3)可以进行View的模拟测试。过去,由于View和Model之间的紧耦合,在Model和View同时开发完成之前对其中一方进行测试是不可能的。出于同样的原因,对View或Model进行单元测试很困难。现在,MVP模式解决了所有的问题。在MVP模式中,View和Model之间没有直接依赖,开发者能够借助模拟对象注入测试两者中的任一方。

  这些年来,在使用设计模式和最佳实践方面,我辅导过很多开发者。一个伴随始终的问题是:Model-View-Controller(MVC)模式和Model-View-Presenter(MVP)模式之间有什么区别?令人吃惊的是,答案比你想象的复杂的多。

  在深入研究两者不同之前,让我们看看MVC和MVP模式是如何工作的,它们能够给开发者带来哪些好处?MVC和MVP模式已经流行了很多年,两者都体现了面向对象设计的一个关键原则,也就是,分离显示视图和业务逻辑。当前有很多的框架都是基于该模式的,如Java Struts,ROR,Microsoft Smart Client Software Factory,Microsoft Web Client Software Factory,加上最近开源的ASP.NET MVC Framework。

  Model-View-Controller(MVC)模式

  MVC模式,是一种用户界面表示模式,核心是要将表示层(View)和业务逻辑层(Model)分离。MVC模式将职责分成三层,View层负责渲染用户界面元素,Controller层负责响应用户动作,Model负责业务逻辑和管理状态。在大多数实现中,三层能够直接交互,然而有些情况下,Controller负责决定显示哪一个View;

  Model-View-Presenter(MVP)模式

  MVP模式是基于MVC模式的用户界面表示技术。MVP模式将职责分成四层:View负责渲染用户界面元素,提供接口供Presenter调用;Presenter充当Model和View的中间人;Model层负责处理业务逻辑和管理状态。在某些实现中,Presenter需要通过服务接口层(Service / Controller Layer)与Model交互。View和服务接口层通常用来为Presenter和Model编写单元测试。

  MVC 和 MVP模式的优势和劣势

  在使用任何一种设计模式之前,都需要考虑该模式的优势和劣势。毫无疑问,使用MVP和MVP模式有很多好处(参见下面列表),但有些劣势也不可忽略,最大的劣势是增加了一定的复杂性和学习成本。

  (1)松耦合;

  (2)职责分离清晰;

  (3)测试驱动;

  (4)重用代码;

  (5)隐藏数据访问;

  (6)可扩展性;

  MVC 和 MVP模式的关键区别

  所以,什么是MVC 和 MVP模式的关键区别?两者之间主要的区别是其实现方式和偶尔有些情况下需要同时使用Presenter和Controller。

  下面是具体的比较:

  (1)MVP:View和Model之间是松耦合的,Presenter负责将Model绑定到View。通常情况下,View和Presenter是一对一的关系,复杂的View可能有多个Presenter。

  (2)MVC:Controller是基于操作的,能够在View之间共享。Controller负责决定显示哪个View。

  到此,对技术文摘Model-View-Present (MVP) Pattern for Architecture Android的翻译结束,希望能够增加读者对MVP模式的认识。

  参考文献:

    [1] 英文原文:Model-View-Present (MVP) Pattern for Architecture Android

  本文历史:

  • 2015-08-04  初稿完成。
时间: 2024-11-06 16:44:10

Model-View-Presenter(MVP)模式(一)的相关文章

基于MVP模式实现四则运算器

基于MVP模式四则运算器 来到新东家,项目的框架采用的是MVP模式,刚来公司的时候,项目经理给予分配小任务,首先熟悉MVP模式,而后普通的四则运算器的实现使用MVP分层.这里主要回顾当时做任务时候的对于MVP模式的理解. 我是一名.Net开发工程师,使用语言为C#.微软在桌面客户端的开发上,提供的是WinForm和WPF两种基于.Net Framework的平台,现在的项目也是主要以Winform实现.传统Winform程序如果不予以分层的话,代码耦合十分严重.为解决代码耦合性问题,现在主流的分

Android设计模式-MVP模式

一.什么是MVP模式 MVP(Model / View / Presenter)  是从经典的模式MVC演变而来,Presenter代替activity和fragment成为控制器,而activity和fragment专心做View层该做的事. 二.MVP的优点 1.模型和视图分离开了,层次更清晰了. 2.Presenter可以重复利用了. 3.如果我们把逻辑放在Presenter中,单元测试更简单了 三.实战 下边是我项目的结构图 MVP中parsenter处理完逻辑后通过接口通知View层,

mvp模式的android项目构建

多日未回博客园,风萧萧兮易水寒. 话说上一次发表随笔已是去年,而且看看当时关于android视频方面的记录也只写了开篇就自动阉割成了太监,究其缘由已不堪回首. 太监终究还是太监,没必要再为它续弦. 笔锋一转,近日有看几本android应用方面优化和技巧方面的书,便觉得又该在此处记录下了.有一本专门讲技巧的书还不错,<50 Android Hacks>:50个android开发诀窍. 其中有一篇是讲MVP(Model-View-Presenter)模式的,也就是模型-视图-主导器(书中翻译为此)

ym——Android开发MVP模式(解决了View和Model的耦合)

什么是MVP呢?它又和我们常常听到的MVC有什么关系了以及区别呢? MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示.作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不

MVC模式(Model View Controller)下实现数据库的连接,对数据的删,查操作

MVC模式(Model View Controller): Model:DAO模型 View:JSP  在页面上填写java代码实现显示 Controller:Servlet 重定向和请求的转发: 若目标的相应页面不需要从request里面读取任何信息,则可以使用重定向,可以防止表单重复提交: ------------------------------------------------------------------------------------------------ Stude

android MVP模式简单介绍

原文 http://zhengxiaopeng.com/2015/02/06/Android%E4%B8%AD%E7%9A%84MVP/ 前言 MVP作为一种MVC的演化版本在Android开发中受到了越来越多的关注,但在项目开发中选择一种这样的软件设计模式需保持慎重心态,一旦确定 使用MVP作为你App的开发模式那么你就最好坚持做下去,如果在使用MVP模式开发过程中发现问题而且坑越来越大,这时你想用MVC等来重新设计的话基 本上就等于推倒重来了.要知道在Android上MVP在现在为止并没有统

MVP模式入门案例

随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 四个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:需要View实现的接口,View通过View interface与Pr

MVP模式在Android开发中的应用

一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一时候让Model仅仅关系数据的处理.基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包括4个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:须要View实现的接口,V

应用MVP模式对遗留代码进行重构

AV(Autonomous View)自治视图 在面向终端用户的应用中,都需要一个可视化的UI来与用户交互.这个UI称为View视图. 在早期,我们习惯将所有前台的逻辑,与视图揉在一起,称为AV自治视图. 这些逻辑包括:数据呈现(Display),用户动作的扑捉与响应,数据存储等. 在.Net的Winform和ASP.NET Web Form中,采用的都是事件驱动模型. AV是将所有UI相关的逻辑都注册到视图本身,或者视图元素对应的事件上. 人机交互应用的3个关注点. 数据在UI上的展示. UI

从最简单的HelloWorld理解MVP模式

大多数编程语言相关的学习书籍,都会以hello,world这个典型的程序作为第一个示例.作为Android应用开发者,无论使用eclipse还是用android studio,在新建项目的时候,一直按IDE默认选择项,下一步进行下去,就会创建出一个可以运行的hello,world应用程序.对于这个程序,可以认为是采用MVC模式,对应关系为: View:对应于布局文件 Model:业务逻辑和实体模型 Controller:对应于Activity   但是数据绑定.事件处理(hello world程