谈谈关于MVP模式中V-P交互问题

在差不多两年的时间内,我们项目组几十来号人都扑在一个项目上面。这是一个基于微软SCSF(Smart Client Software Factory)的项目,客户端是墨尔本一家事业单位。前两周,我奉命负责对某个模块进 行Code Review工作,在此期间,发现了一些问题,也有了一些想法。不过,有些想法可能还不是很成熟 ,不能完全保证其正确性,有机会写出来讨论一下。今天来说说关于MVP的一些想法。

一、简单讲讲MVP是什么玩意儿

如果从层次关系来讲,MVP属于Presentation层的设计模式。对于一个UI模块来说,它的所有功能被分 割为三个部分,分别通过Model、 View和Presenter来承载。Model、View和Presenter相互协作,完成对 最初数据的呈现和对用户操作的响应,它们具有各自的职责划分。Model可以看成是模块的业务逻辑和数 据的提供者;View专门负责数据可视化的呈现,和用户交互事件的相对应。一般地,View会实现一个相应 的接口;Presenter是一般充当Model和View的纽带。

MVP具有很多的变体,其中最为常用的一种变体成为Passive View(被动视图)。对于Passive View, Model、View和Presenter之间的关系如下图所示。View和Modell之间不能直接交互,View通过Presenter 与 Model打交道。Presenter接受View的UI请求,完成简单的UI处理逻辑,并调用Model进行业务处理,并 调用View将相应的结果反映出来。View直接依赖Presenter,但是Presenter间接依赖View,它直接依赖的 是View实现的接口。关于MVP和Passive View基本的常识性东西,不是本篇文章论述的重点,对此不清楚 的读者相信可以Google出很多相关的资料来,所以在这里就再多做介绍了。

二、Passive View模式的基本特征总结

Passive View,顾名思义,View是被动的。那么主动是谁呢?答案是Presenter。对于Presenter的主 动性,我个人是这么理解的:

Presenter是整个MVP体系的控制中心,而不是单纯的处理View请求的人;

View仅仅是用户交互请求的汇报者,对于响应用户交互相关的逻辑和流程,View不参与决策,真正的 决策者是Presenter;

View向Presenter发送用户交互请求应该采用这样的口吻:“我现在将用户交互请求发送给你,你看着 办,需要我的时候我会协助你”,不应该是这样:“我现在处理用户交互请求了,我知道该怎么办,但是 我需要你的支持,因为实现业务逻辑的Model只信任你”;

对于绑定到View上的数据,不应该是View从Presenter上“拉”回来的,应该是Presenter主动“推” 给View的;

View尽可能不维护数据状态,因为其本身仅仅实现单纯的、独立的UI操作;Presenter才是整个体系的 协调者,它根据处理用于交互的逻辑给View和Model安排工作。

时间: 2024-10-03 13:21:10

谈谈关于MVP模式中V-P交互问题的相关文章

按钮-MVP模式中 VIEW与VIEW能直接通行吗

问题描述 MVP模式中 VIEW与VIEW能直接通行吗 我想在项目中 在一个窗口中点击一个按钮另一个窗口需要做一些按钮禁用,我采用的是MVP模式,每一个窗口对应一个PRESENTER,我想知道窗口间的通信时VIEW与VIEW直接通信,还是通过对应的PRESENTER去通信? PRESENTER和PRESENTER之间又是如何通信的. 解决方案 View与View间可以直接通信,Presenter对于View而言最终只是获取加工数据的一个接口.关于MVP请参看http://blog.csdn.ne

浅析MVP模式中V-P交互问题及案例分享_实用技巧

在差不多两年的时间内,我们项目组几十来号人都扑在一个项目上面.这是一个基于微软SCSF(Smart Client Software Factory)的项目,客户端是墨尔本一家事业单位.前两周,我奉命负责对某个模块进行Code Review工作,在此期间,发现了一些问题,也有了一些想法.不过,有些想法可能还不是很成熟,不能完全保证其正确性,有机会写出来讨论一下.今天来说说关于MVP的一些想法. 一.简单讲讲MVP是什么玩意儿如果从层次关系来讲,MVP属于Presentation层的设计模式.对于一

详解MVP模式在Android开发中的应用_Android

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

详解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实现的接口,View

Android初尝甜果之MVP模式

原文链接 对于WEB开发者来说,MVC模式是铭刻在心的.相信很大一部分在开发界的朋友都对MVC有些许了解,MVP是适用于Android项目下的类似MVC模式,区别是Controller换成了Presenter来分发数据和视图的控制. 首先看下MVP整体结构: 其中model对应着M,presenter对应P,view对应V.以一个简单的保存用户信息的例子来说明整个项目! 第一步建立对应用户的实体类UserBean public class UserBean { public static fin

从推广模式中谈网站盈利失败的原因

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 站点的运营与盈利就好比是鱼和水的关系,一个无法盈利的站点(公益性站点除外)是无法长期运营下去的,对于站长来说不管最初我们因为什么原因建站,最后一定会回到盈利这条线上.对此作为站长任何时候站点运营一定要把盈利作为思考问题的起点.我们必须注意到现今互联网上有大量的站点无法实现真正的盈利,有的甚至还在不断的投钱进去,原因是什么?站点运营上又是举步维

MVP模式在Android项目中的使用

  以前在写项目的时候,没有过多考虑架构模式的问题,因为之前一直做J2EE开发,而J2EE都是采用MVC模式进行开发的,所以在搭建公司项目的时候,也 是使用类似MVC的架构(严格来讲,之前的项目还算不上MVC模式,只是简单将网络请求与界面分离,然后通过Handle通知更新界面).这种写法,在后 面随着项目越来越大,Activty或者Fragment中代码也会越来越多,导致项目的维护变的越来越复杂.所以需要另外一种架构模式来解决这个问题, 在网上浏览了一圈,发现适合Android开发的架构模式非M

Android中mvp模式使用实例详解

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

ASP.NET MVC Framework与WCSF中MVP模式的比较

概述 MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成为.NET 社区的热名话题.作为MVC的变种MVP模式,也已经出现好几年了,在微软模式与实践小组提供的Web Client Software Factory中,给出了实现 MVP模式的应用程序最佳实践,本文将试着对这两种实现比较一二. MVC(Model-View-Controller,模型-视图-控制器)模式是80年代 Smalltalk-80出现的一