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\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...
随机推荐
- [Angular] Reactive Store and AngularFire Observables
A simple store implemenet: import { Observable } from 'rxjs/Observable'; import { BehaviorSubject } ...
- TTS-零基础入门之语音模板化
上篇介绍了TTS的一个简单样例http://blog.csdn.net/u010176014/article/details/47326413 本篇咱们进一步聊聊 语音怎样读模板. 比方 公交车上的模 ...
- spring与memcache的整合
1. pom.xml文件增加: <dependency> <groupId>com.whalin</groupId> <artifactId>Memca ...
- linux的关机
shutdown -h now 立即关机 shutdown -r now 立即重启
- 7.2 基础知识ArrayMap
1.android源码中维护有键值对,通过键可以找到值 Java中Object是所有类的父类,对于键值对的保存如果使用个ObjectArray数组,比如N个位置存放键,N+1的位置就存放值,那么如果键 ...
- Android 底部TabActivity(0)——开篇(界面分析|系列文章文件夹)
当下主流的软件没有一个统一明白的风格,App框架什么样的都有,但个人钟情于页面底部Tab分签架构,移动设备的屏幕尽管越来越大,可是显示的内容还是有限,为了能展示很多其它的内容,方便简洁的操作习惯中Ta ...
- Android 利用an框架快速实现网络请求(含下载上传文件)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/22573081来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架是完全 ...
- Qt 使用qDebug() 打印Qlist 容器数据(将QDebug()定义成某个类的友元函数)
当QList<T>容器中的数据用qDebug() 打印时 ,假如 T 是内置类型(int float ...)与 打印一个字符串使用完全一样,假如T 是一个CustomerClass 那 ...
- php 随机数中奖demo演示
感谢https://blog.csdn.net/z960339491/article/details/69511491提供的思路,应该是java,于我不合适,写了php <?php // 中奖概 ...
- php 微信支付企业付款
1.所需参数 字段名 变量名 必填 示例值 类型 描述 公众账号appid mch_appid 是 wx8888888888888888 String 公众号的appId 商户号 mchid 是 19 ...