但是如果按照著名的 Android-CleanArchitecture
(github.com/android10/A…) 介绍的架构对项目进行分层,整个项目会有好几个 module
。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJZ86GRW-1638078773628)(https://user-gold-cdn.xitu.io/2018/11/3/166d7deec392e066?imageView2/0/w/1280/h/960/ignore-error/1)]
先贴出 Clean architecture 的架构图感受下~
基于这个分层思想,我的项目结构是这样的:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K3dCtbLS-1638078773659)(https://user-gold-cdn.xitu.io/2018/11/3/166d7deec3bf9e4c?imageView2/0/w/1280/h/960/ignore-error/1)]
项目一共分为四层 common
: 整个依赖的最底层,抽取出其他层共有的代码。比如 RxJava的封装,工具类的封装等。 data
: 数据层,网络数据、数据库中数据处理层。 domin
: 这层应该是纯 Java 代码,从 data
层出来的数据要经过 domin
转换一下,UI层 app
引用的实体都是 domin
层的。用这种方法来隔离网络和数据库数据变化对代码的影响。 app
: 应该叫 presentation
表现层,觉得这名字太长还是 app
看着舒服~ 这层就是正常的 Android 代码。
这里对 Clean architecture
做了一定的修改,在实践中感觉这样分层开发更顺手。 具体的架构解析及每一层具体该怎么写请关注后面的文章,以后都会详细讲解。
重回刚才的问题,为什么要抽取依赖统一管理?
有四个 module
就有四个 build.gradle
,并且依赖很多都是重复的,分开写在四个不同的文件不利于后期维护升级。 想想如果要更改某个依赖的版本,得打开四个文件挨个改,多麻烦。 所以将可变的依赖抽离出来统一管理是很有必要的。
二、提取方法
下面就是具体的操作方法。 把大象装进冰箱需要几步?
三步走:
1、创建管理依赖的文件
本项目中在与 app
, data
同级的根目录下创建了文件夹 buildsystem
,然后在这个文件夹下创建文件 dependences.gradle
。目录结构如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mghLIsc5-1638078773660)(https://user-gold-cdn.xitu.io/2018/11/3/166d7deec3a39916?imageView2/0/w/1280/h/960/ignore-error/1)]
dependences.gradle
代码:
ext {
//Android
androidBuildToolsVersion = “27.0.3”
androidMinSdkVersion = 18
androidTargetSdkVersion = 27
androidCompileSdkVersion = 27
//Libraries
recyclerViewVersion = “27.0.2”
rxjava2Version = “2.1.8”
rxandroidVersion = “2.0.1”
daggerVersion = “2.14.1”
glideVersion = “4.5.0”
butterKnifeVersion = “8.8.1”
bannerVersion = “1.4.10”
loggerVersion = “2.1.1”
baseRecyclerViewAdapterHelperVersion = “2.9.30”
dbflowVersion = “4.2.4”
app = [
recyclerView : “com.android.support:recyclerview-v7: r e c y c l e r V i e w V e r s i o n " , r x j a v a : " i o . r e a c t i v e x . r x j a v a 2 : r x j a v a : {recyclerViewVersion}", rxjava : "io.reactivex.rxjava2:rxjava: recyclerViewVersion",rxjava:"io.reactivex.rxjava2:rxjava:{rxjava2Version}”,
rxandroid : “io.reactivex.rxjava2:rxandroid: r x a n d r o i d V e r s i o n " , d a g g e r : " c o m . g o o g l e . d a g