Android MVP初步研究

    做android开发这么久了,看到自己项目的代码结构实在是混乱、同事离职代码交接实在是一件头疼的事,
所以迫切希望了解一下好的代码结构。以便后续代码管理、以及项目代码的优化。
一些逻辑写在另一个类中,但是Activity中看起来还是比较庞大,当你看到一个1000多行的Activity的时候                (特别是这个不是自己写的时候)真的是一万只草泥马奔腾。。
    当看到MVP这个模式的时候,觉得真的很适合在项目中去运营它,这里对这个模式进行一个简单的研究,                 希望能够早日运用到项目中,下面是自己对MVP的一些理解

一、MVP介绍
MVP是由MVC演变过来的,这里就介绍MVP模式,有兴趣自己百度研究一下
在MVP模式里通常包含5个要素

  1. View: 负责绘制UI元素、与用户进行交互(在Android中体现为Activity)
  2. View Interface: 需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,
    方便进行单元测试(由于公司项目没有单元测试有空需要研究一下);
  3. Model: 负责存储、检索、操纵数据 (如网络请求数据请求解析)
  4. Model Interface:需要Model实现的接口,方便 Presenter 调用Model (也可以不需要)
  5. Presenter :作为View与Model交互的中间纽带,处理与用户交互的逻辑,Presenter 中通常包含
    View Interface,Model Interface。

二、MVP模式优点

  1. 分离了视图逻辑和业务逻辑,降低了耦合
  2. Activity只处理生命周期的任务,代码变得更加简洁
  3. 利于测试驱动开发
  4. 视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中去,提高代码的可阅读性
  5. Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试
  6. 把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致Activity的资源无法被系统
    回收从而引起内存泄露和OOM

三、MVP模式工作原理
mvp工作流程图

    如图所示,View与Model并不直接交互。而是使用Presenter作为View与Model之间的桥梁,
其中Presenter中同时持有Viwe层以及Model层的Interface的引用,而View层持有Presenter层的
引用(或者Interface的引用)。
    当View层某个界面需要展示某些数据的时候,首先会调用Presenter层的某个接口(或者方法),                    然后Presenter层会调用Model层请求数据,当Model层数据加载成功之后会调用Presenter层的回调方法通知
Presenter层数据加载完毕,最后Presenter层再调用View层的接口将加载后的数据展示给用户。

四、MVP模式在项目中的使用

项目功能演示:
项目演示

关于android MVP的博客有很多,不过大多数都是比较简单的例子,这个例子是采用我们项目中比较
常见的列表展示数据的一个界面用MVP设计模式实现。能够更深入的理解MVP模式

代码结构:

这里写图片描述

项目源码

这里不贴代码了,有兴趣可以查看源码

项目源码

五、参考资料
http://blog.csdn.net/vector_yi/article/details/24719873
http://blog.csdn.net/lmj623565791/article/details/46596109
https://segmentfault.com/a/1190000003927200
http://www.cnblogs.com/liuling/archive/2015/12/23/mvp-pattern-android.html 本博客项目是参考该博客的
项目,对他的项目进行了一下简化以及崩溃问题解决。有兴趣可以看一下(刷新的时候滑动RecycleView数组越界崩
溃,主要是清除数据姿势不对 )。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值