今天的文章没有源码。理论部份会比较多。
关于mvp+Retrofit+RxJava 现在非常流行的一套组合。之前一直有使用在自己的demo中但是毕竟是demo。当把这一套用到实际项目的时候还是会遇到一些坑。
感受(目前使用感受而非官方说法)
- 复用性变强
- 可维护性高
- 代码更简洁(更多得益于retrofit和rxjava)
- 调试与单元测试也更方便
- 需要编写的类也更多
首先我是参考官方给出的例子进行的编码。大致如下
View(package)
Base类当然是免不了的。官方使用是将view与presenter的接口写为内部类。这个和之前网上的一些例子不同(之前是将两个单独出来两个类)。内部类的好处不言而喻。在项目中生成的package和class也相应的少一半(实际生成还是两个class文件)
UI(package)
Presenter(package)
V与P分别实现对应的接口。将V传入P中与之关联。当然还有就是无论MVP中哪个层都肯定肯定会有一个base类
- M 通用的回调接口
- V 通用的主题、帮助方法等根据业务需要
- P 一些需要在ui销毁释放的实例 比如我这里就保存着subscription在ui销毁时对应自动释放
Http(package)
这方面就比较纯粹了和网上的例子都差不多主要的在okhttp的拦截器这里。我们一般都会在控制台打印一些网络方面的信息。使用HttpLoggingInterceptor这些基本都全了。常用信息都输出了。
还有一个重点就是拦截器中下面这段代码。在每次请求中带上固定的一些参数。有些公司会在header头中有些会在body中等。在header头中好说。body中我当时还真找了半天找不到。 但是最终还是google出来了。
上面有说复用性。这里只放这些代码似乎好像看不出来复用性的地方。
举个栗子:有一个列表和对应的详情界面还个地方都有调用相同接口的地方。那么这时presenter肯定是写一遍两个界面用。
因为之前是将activity传用presenter中。而activity实现的View都继承自baseView.于是方法中可以这么传入
那么由哪个界面调用的自然会加回调给对应的activity中。有没有觉得很棒的。虽然一开始编码会多点。但带来的好处却是更多的。
写在最后
更新了一个小demo(好像大家看图还是不够直观) 虽然demo和截图没有关系。但逻辑写法完全一模一样(ps 公司的项目我怎么放出来 -- )
https://github.com/EasonHolmes/MVP_Retrofit_Rxjava
如果有问题请留言 我可是留言一定会回复的好博主~~~
博主在找工作 位置 上海 请好主收下我的膝盖~~