基于Kotlin的MVP基础封装

这段时间在写基于gank API客户端Demo的时候,尝试着封装了一把MVP,下面就来谈谈这整个过程中的一些感想。

MVP

说起MVP,大家都是熟悉的不能再熟悉的了,但是要封装一套好的MVP还是很有必要的,可以很快捷的开发项目。接着简单提一下我对MVP的个人理解吧(白话文^-^)。

mvp.png

View层:取数据和显示界面,问P层索要数据,在界面上显示数据。

Presenter层:把View需要的操作传递给Model层,然后Model层处理完复杂操作之后通过P层来把结果传递给View层。

Model层:P层让我干什么我就干什么,有什么用和怎么用不需要管,只管处理,然后把处理后的结果回调给P层。

了解了三者的基本关系之后,接着来看看具体如何封装属于自己的MVP结构。我这里是按照自己的需求,大家仅供参考!

Demo整体结构如下:

demo.png

整个项目按照上图结构设计。

下面介绍两个比较重要的地方:和

IBaseView:

其中里面写了两个通用方法:在请求网络的时候用到的通用方法,显示和隐藏进度条。

当我们在实现具体时,只需继承它就行了,不必每次都把和写一遍,如:

这是demo中的一个,另外定义了两个方法,一个是展示获取的Android数据,还有一个就是获取数据失败的方法。显示和隐藏进度条就交给来实现。

BasePresenter:

而里面实现了P层和V层的绑定和解绑,这里需要知道,在MVP结构中,P和V是双向绑定的,如果我们只绑定不解绑的话,在已经销毁的情况下,如果还在执行操作,那么就会造成无法被释放的问题,产生内存泄漏。所以这里一定要注意P和V的解绑,具体实现是在中统一处理。具体代码如下:

同一样,在实现具体的的时候,也只需要继承就ok了。只需要另外加上自己的逻辑,不考虑每次的V和P的解绑。如:

BaseActivity

在除了日常的四个抽象方法之外,主要还是封装了通用的进度条的显示和隐藏,P层和V层的绑定和解绑。

MVP-BaseActivity.png

通过实现IBaseView接口,把里面的方法进行重写,调用和方法。

通过泛型来实现P层的引用,然后通过来得到具体的,这样就可以在方法里面对P和V进行绑定,在方法里对P层引用的进行释放。

具体代码如下:

网络

网络部分主要采用的是OkHttp3+Retrofit2的方式,通过设置公共头参、Log输出、超时连接等,是用来进行网络请求,最终的线程转换是通过RxJava来实现的,由于网络这块还没深入去探究,暂时只简单封装了一下,后期会在此基础上完善。具体的代码会在文末贴上链接。

写在最后

每个人不是天生就强大,你若不努力,如何证明自己,加油!

Thank You!

--Taonce

如果你觉得这篇文章对你有所帮助,那么就动动小手指,长按下方的二维码,关注一波吧~~非常期待大家的加入

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181101G09UJ100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券