MVP框架模式
一、基本概念
MVP是Model-View-Presenter的简称,即模型-视图-表现层的缩写。MVP是由MVC模式进化而来的,MVP改进了MVC中的控制器过于臃肿的问题。
与MVC一样,MVP将应用程序的数据处理、数据显示和逻辑控制分开,用一种业务逻辑、数据显示和界面相分离的方法组织代码。
二、MVP与MVC的比较(以Android开发为例)
MVP与MVC相比,MVP减少了Activity的职责,简化了Activity的代码,将复杂的逻辑代码提取到了Presenter中进行处理。Presenter的出现,将Activity视为View层,Presenter负责完成View层与Model层的交互。与之对应的好处就是:程序耦合度更低,更加方便地进行测试,程序可扩展性大大提高。
MVP从MVC演化而来,它们的基本思想有相通的地方。Controller与Presenter负责逻辑的处理,Model提供数据,View负责显示数据。MVP作为一个新的模式,与MVC有一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部;而在MVC中View会直接从Model读取数据。
MVP解决了MVC问题:
在MVP中,Presenter完全把View与Model进行分离,主要的程序逻辑在Presenter实现。而且,Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View层的时候可以保持Presenter不变。不仅如此,我们还可以编写测试用的View,模拟用户的操作,从而实现对Presenter的测试——而不需要使用自动化的测试工具。
MVP中的View层是很薄的一层,View只应该有简单的set/get方法、用户输入和界面显示的内容,除此之外不应该有更多的内容,绝不允许直接访问Model——这就是MVP与MVC的很大不同之处。
三、MVP的工作原理和结构
1、模型(Model)
模型表示业务逻辑和实体模型,提供数据给Presenter。
2、视图(View)
视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接受用户的输入数据,但它不进行任何实际的业务处理。
3、表现层(Presenter)
应用程序主要的程序逻辑在Presenter内实现,而且Presenter将Model和View完全分离,所有的交互都发生在Presenter内部,具体业务逻辑全部交由Presenter接口实现类中进行处理。
四、MVP的优点
1、模型与视图完全分离,我们可以修改视图而不影响模型。
2、可以更加高效地使用模型,因为所有的交互都发生在Presenter内部。
3、我们可以将一个视图用于多个视图,而不需要改变Presenter内部的逻辑。这个特性非常有用,因为视图的变化总是比模型的变化要频繁。
4、把程序逻辑放在Presenter中,我们就可以脱离用户接口来测试这些逻辑了。(单元测试)
五、MVP的缺点
由于对View的操作放在了Presenter中,所以View和Presenter的交互会过于频繁。如果Presenter过多地操作视图,往往会使得它与特定的 View联系过于紧密。一旦视图需要改变,那么Presenter也需要改变。
MVP模式demo下载:http://download.csdn.net/download/qq_33721382/10164979
参考资料:
http://blog.csdn.net/dantestones/article/details/51445208
http://blog.csdn.net/lmj623565791/article/details/46596109
https://baike.baidu.com/item/MVP/3714550
MVP框架模式的更多相关文章
- Android MVP框架模式
结合前一篇MVC框架模式 为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Mode ...
- 开发模式 MVC、MVP、MVVM和MVX框架模式
MVX框架模式的了解 MVX框架模式:MVC+MVP+MVVM 1.MVC: Model(模型)+View(视图)+controller(控制器),主要是基于分层的目的,让彼此的职责分开.View通过 ...
- Android应用中MVP开发模式
所谓MVP(Model-View-Presenter)模式.是将APP的结构分为三层: view - UI显示层 view 层主要负责: 提供UI交互 在presenter的控制下修改UI. 将业务事 ...
- 简述MVC框架模式以及在你(Android)项目中的应用
标题是阿里电话面试的问题,一直以为自己很清楚MVC模式,结果被问到时,居然没法将MVC和Android中各个组件对应起来,所以,面试肯定挂了,不过面试也是学习的一种方式,可以知道大公司看中什么,以及自 ...
- [转]框架模式 MVC 在Android中的使用
算来学习Android开发已有2年的历史了,在这2年的学习当中,基本掌握了Android的基础知识.越到后面的学习越感觉困难,一来是自认为android没啥可学的了(自认为的,其实还有很多知识科学), ...
- 框架模式 MVC 在Android中的使用
算来学习Android开发已有2年的历史了,在这2年的学习当中,基本掌握了Android的基础知识.越到后面的学习越感觉困难,一来是自认为android没啥可学的了(自认为的,其实还有很多知识科学), ...
- MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
前言: 刚刚学完了MVC,根据自己的感悟和理解写了一个小项目. 完全按照MVC模式,后面有一个MVC的理解示意图. 用MVC模式重新完成了联系人的管理系统: 用户需求: 多用户系统,提供用户注册.登录 ...
- mvp框架
本文在于巩固基础 mvp框架的概念: MVP是MVC模式的另一个变种,MVP即可以应用到WEB项目中, 也可以应用到Winform项目中,它的方便的测试机制为大型复杂的企业级应用带来了福音,MVP模式 ...
- 设计模式笔记之一:MVP架构模式入门(转)
写在前面:昨天晚上,公司请来专家讲解了下MVP,并要求今后各自负责的模块都要慢慢的转到MVP模式上来.以前由于能力有限,没有认真关注过设计模式.框架什么的,昨晚突然兴趣大发,故这两天空闲时间一直在学习 ...
随机推荐
- python range函数与numpy arange函数
1.range()返回的是range object,而np.arange()返回的是numpy.ndarray() range尽可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向 ...
- [Gradle] 获取 gradle 命令行参数
project.gradle.startParameter 参考 StartParameter | Gradle API 4.9
- CentOS7安装步骤详解
准备环境 1.虚拟机 VMware Workstation 2.Centos7-64位安装包 ( CentOS-6.7-x86_64-bin-DVD1.iso ) 开始安装 进入安装初始化界面 ...
- 系统中同时有 python2和 python3,怎么让 ipython 选择不同的版本启动?
已经安装的情况下: > which ipython /usr/local/bin/ipython > cat /usr/local/bin/ipython #!/usr/local/op ...
- 自旋锁原理及java自旋锁
一.自旋锁的概念 首先是一种锁,与互斥锁相似,基本作用是用于线程(进程)之间的同步.与普通锁不同的是,一个线程A在获得普通锁后,如果再有线程B试图获取锁,那么这个线程B将会挂起(阻塞):试想下,如果两 ...
- arpa/inet.h所引起的Segmentation fault及网络编程常见的头文件
最近在学习Linux网络编程方面的知识,感觉还是有些困难.主要是对协议过程的理解,还有socket的API的理解不够深刻.今天复习编写了一个TCP的服务端和客户端的程序实现client.c从命令行参数 ...
- 第1章 1.7计算机网络概述--理解OSI参考模型分层思想
OSI七层模型,知识参考理论. 分层标准的好处: 1.不同的硬件生产商生产的硬件产品,连通后就可以用了,有助于互联网发展. 2.分层,分成不同的模块,某一层的变化,不会影响其他层.如:IPv4改为IP ...
- H5保养
合成油上面写着A3B4级,可以用的.绿静发动机说明书上写着呢CI-4级或A3B4级都可以用. 你的车换机油要加多少升? 5.6标准数,先加5L后看机油尺,在中间就行, 多点少点只要不过上线就无所谓. ...
- innobackupex 还原和备份实例
InnoDB 和非 InnoDB 文件的备份都是通过拷贝文件来做的,但是实现的方式不同,前者是以page为粒度做的(xtrabackup),后者是 cp 或者 tar 命令(innobackupex) ...
- linux 如何查看防火墙是否开启
service iptables status可以查看到iptables服务的当前状态.但是即使服务运行了,防火墙也不一定起作用,你还得看防火墙规则的设置 iptables -L在此说一下关于启动和关 ...