天天看点

Rxjava + retrofit + dagger2 + mvp搭建Android框架

最近出去面试,总会被问到我们项目现在采用的什么开发框架,不过据我的经验网络框架(volley)+图片缓存(uil)+数据库(orm)+mvp,不过现在这套框架比较好了,现在采用什么呢?rxjava + retrofit + dagger2 + mvp。好,那我们接下来说说由这几种库来组成我们一个常用的开发框架(当然其他的还有一些什么推送什么的我们另当别论)。

借用google的一个mvp的说明图

Rxjava + retrofit + dagger2 + mvp搭建Android框架

与常规的 mvp 不同的是,在 modle 层和 view 层通过eventbus 连接,当数据发生变化时,发出对应的 event,注册了这个 event 的 view会采取对应的措施。举个例子,退出登录用在这样的情形就很合适,在退出登录后,我们可能不止一个 view 会发生变化,如果把这些写在每一个 presenter 中无疑是很不简洁的代码

在 modle 层中,抽象出了一个 datamanger,通过datamanger 我们与数据的具体实现进行了解耦,在 p 层我们无需关注数据是来自 db ,sp 还是网络。我们只关心拿到的数据对象,而在datamanger 和 具体的数据实现中 还有一层 helper层,这层封装了对数据的具体操作,比如 dbhelper、sphelper、retrofitservie,有了这一层封装可以很方便我们进行扩展。

datamanger 和 helper累 中的方法拿到的都是 observeable ,从而方便我们对这个流进行操控。

那么我们接下来根据这些不同库,来看看用这几种库组件框架怎么样呢

项目使用了 dagger2 依赖注入框架解耦个层,使得单测和框架替换变得很容易。想要了解什么是依赖注入(控制反转)可以访问如下地址:http://blog.csdn.net/xiangzhihong8/article/details/51707776。

首先看<code>applicationcomponent</code>,他有一个<code>moudle</code>,并且将这个<code>moudle</code>中的提供的构造方法暴露出来,可以看到databasehelper、preferenceshelper等暴露出来的都是全局使用的对象

###

可以看到在<code>applicationmodule</code>中的 provide 方法暴露出的方法对比<code>applicationcomponent</code>中需要的方法,发现还缺了几项。<code>databasehelper</code>、<code>preferenceshelper</code>、<code>datamanager。</code>

<code></code>

用<code>@inject</code>标注了构造方法,当注入了<code>datamanager</code>时,在<code>module</code>中找不到对应的

provide 方法,变会在构造方法中寻找,在递归的找参数中的注入…

以下是使用draggle的一张图:

Rxjava + retrofit + dagger2 + mvp搭建Android框架

再来看下 retrofit service 中

在构建了 <code>retrofit</code>后再构建<code>service</code>,要是我来写的话会把<code>retrofit</code>也用

dagger 注入的方式来提供。

datamanger 基本上放的就是业务逻辑了,具体看个例子

在<code>syncribots</code>方法中,我们通过retrofit 获得网络的数据,再用 db 存储,再把结果用<code>observable</code>的结构返回给

p层,在这个例子中是在一个 service 中调用这个方法