一、这个App整体的架构划分:
分为四大模块:
1.app模块
2.common模块
3.domain模块
4.model模块
app模块的依赖:
dependencies {
compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
compile project(‘:domain‘)
...
}
它依赖domain,领域层模块。在app模块中,应用了MVP模式,把一个activity中的View和Presenter划分掉。
domain模块的依赖:
dependencies {
compile project (‘:common‘)
compile project (‘:model‘)
...
}
它依赖model模块。领域逻辑代码放在这个模块;需要获取数据,获取数据的实现代码则放在module模块;它依赖common,通用的功能,整个应用共用的代码,放在common模块中。
model模块的依赖:
dependencies {
compile project(‘:common‘)
....
}
这个模块只依赖common模块。model模块提供数据获取,修改功能。
common模块的依赖:
dependencies {
compile ‘com.squareup:otto:1.3.5‘
compile ‘com.google.dagger:dagger:2.0‘
compile ‘org.glassfish:javax.annotation:10.0-b28‘
}
它不依赖domain,app,model模块。它使用第三方类库,来给其它模块提供功能。使用Dagger依赖注入框架,进行依赖注入;使用otto类库,来实现总线方式的通信。
二、整个执行流程简要分析
app模块:
MoviesActivity,MoviesPresenter。
domain模块:
ConfigurationUsecase, GetMoviesUsecaseController。
module模块:
RestMovieSource。
模块之间的通信,协作使用Bus总线来实现。比如,module模块,接受了数据查询的请求,查询完毕之后,它就通过总线post出去;然后,app模块或者domain模块,使用总线订阅了某个事件,那么订阅该事件的方法就会被回调。
三、依赖注入框架,注入流程