Android--MVP设计模式实践
MVP设计模式是android开发讨论的很火的一个话题,我对设计模式也有一些拙见,为了实践我的一些想法,我在我最新开发的产品中将我心目中的MVP设计模式进行了实践,最后得到了这样的架构。
特点:简单,清晰,拓展性好,能够解决目前碰到的业务场景
因为是基于MVP进行的改造,所以同样是有Model,Presenter,View三层,三层的关系如下图:
1. view单向持有presenter,所有同步数据的获取都是通过presenter得到
2. presenter单向持有model,通过model去获取持久化数据
3. presenter单向持有httpCallback,用于发起异步请求
4. httpCallback通过EventBus消息的方式通知到注册了消息的view
5. view自己保存自己的数据,当收到otto消息的时候自行展示
注意只是展示数据而已,不对数据做任何处理,不包含业务
6.单Activity架构,view和view之间的通信通过UiManager来实现,所有Window级别view的创建都在UiManager里面完成
7.UiManager的生命周期同Activity保持一致,view通过event与UiManager进行通信
8.所有对象之间的持有都是通过dagger2框架的依赖注入来实现
这样的设计目的有以下几点:
1. 不设计层和层之间的双向持有,双向持有用来解决的异步更新的问题通过EventBus让view自行实现
1.1. 一是给presenter减负,不需要持有每个view的数据,对view的逻辑控制可以将数据的展现完全交给view来做
1.2. 二是解决了双向持有之间的权利分配问题,减少接口定义的工作,让分层更加清晰,代码更简单
2. 同MVP一样,view负责向presenter索取数据和展示数据,是绝大部分用户交互流程的起点和终点(自发业务除外,比如定时更新等),让view层有更好的拓展性
为了实现以上架构,用了以下几个开源框架,让代码更加简洁:
Dagger2,依赖注入框架,让创建类变成一件很简单的事情
Otto,RxAndroid的前身,一款EventBus框架,解决异步通知的问题
ButterKnife,针对android的代码自动生成框架,不需要再写findViewById和setOnClickListener这样的方法
okhttp+retrofit,网络通信框架,串联式的异步通信开发,保证功能和效率的同时降低开发成本
Android--MVP设计模式实践的更多相关文章
- Android MVP 设计模式
1.基本概念 Model : 模型 负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等: View : 视图 负责界面数据的展示,与用户进行交互: Presenter ...
- android mvp设计模式
什么是MVP MVP,全称 Model-View-Presenter.要说MVP那就不得不说一说它的前辈——MVC(Model-View-Controller,模型-视图-控制器). View:对应于 ...
- android MVP设计模式!
实现原理: MainActivity 用来更新UI,和显示业务逻辑的结果! LoginPresenterCompl 用来处理 业务逻辑 ILoginPresenter 业务处理类抽象出来的接口 ILo ...
- Android架构(一)MVP架构在Android中的实践
Android架构(一)MVP架构在Android中的实践 https://www.300168.com/yidong/show-2790.html 核心提示:为什么要重视程序的架构设计 对程序进 ...
- Android MVP+Retrofit+RxJava实践小结
关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...
- Android之MVP设计模式
一.概述 MVP设计模式的前身是MVC,这个无需再议 在安卓工程中MVC对应关系如下: Layout->View : 对应布局文件Activity->Controller,View (其中 ...
- Android MVP模式的初识
MVP是什么?或许在之前更多的人知道的是MVC这个模式(Model View Controller),然而MVP与MVC最不同的一点是M与V是不直接 关联的也是就Model与View不存在直接关系 ...
- Android MVP Presenter 中引发的空指针异常
一.概述 最近对 googlesamples/android-architecture 中的 MVP-dagger 进行了学习.对照项目的 MVP-dagger 分支,对 MVP-dagger 进行了 ...
- Android MVP模式
转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...
随机推荐
- OpenNI2获取华硕XtionProLive深度图和彩色图并用OpenCV显示
使用OpenNI2打开XtionProLive时有个问题,彩色图分辨率不管怎样设置始终是320*240,深度图倒是能够设成640*480,而OpenNI1.x是能够获取640*480的彩色图的. 彩色 ...
- PHP的工作原理和生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013778883/article/details/79831035 php是一门适用于web开 ...
- Qt没有被正确安装,请运行make install问题的解决
在网上直接下载别人编译好的Qt库,为自己使用省了不少事.但往往也会遇到些问题,其中Qt version is not properly installed,please run make instal ...
- C标签的使用.md
<c:set> 设置变量 <c:set var="a" scope="request" value="${'www'}"/ ...
- 无法顺利删除问题处理一则-ORA-00604和ORA-00942错误
1.以sys/oracle登录 2. -- Create tablecreate table ARGUMENT$( OBJ# NUMBER not null, PROCEDURE ...
- 服务器svn 小乌龟 visualsvn server manager Tortoisesvn的部署使用
这个主要说说实现hook,就是本地上传文件后,服务器svn将相应的文件也修改了,实现本地上传,可以及时在浏览器查看效果 首先安装visualsvn 可参考http://blog.csdn.net/zl ...
- term- xshell VS securecrt
Xshell使用技巧总结 https://www.cnblogs.com/zhangwuji/p/7155575.html SecureCRT与Xshell简单对比 http://ju.outofme ...
- DC综合:划分与编码风格
划分与编码风格 合理的设计划分和好的HDL编码风格对成功的综合影响很大. 逻辑划分是成功综合(和布局布线,如果布图是层次化的)的关键. 综合划分 "分而治之" 把复杂的设计化简为更 ...
- php实现包含min函数的栈(这个题目用另外一个栈做单调栈的话时间复杂度会低很多)
php实现包含min函数的栈(这个题目用另外一个栈做单调栈的话时间复杂度会低很多) 一.总结 这个题目用另外一个栈做单调栈的话时间复杂度会低很多 二.php实现包含min函数的栈 题目描述 定义栈的数 ...
- OpenGL核心之视差映射
笔者介绍:姜雪伟,IT公司技术合伙人.IT高级讲师,CSDN社区专家,特邀编辑.畅销书作者;已出版书籍:<手把手教你¯的纹理坐标偏移T3来对fragment的纹理坐标进行位移.你能够看到随着深度 ...