青训营大作业技术选型介绍(一) | 青训营笔记

74 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第4天

Composing Gradle

  • 优化gradle的构建速度。

  • 在build_logic下集中管理各个模块的gradle配置,包括ARouter和Room的kapt插件配置、各个模块所需的基础依赖库等,项目工程下所有module、lib包括app模块的build.gradle.kts文件只需一行代码即可完成配置,简洁清晰。

  • 存放项目所需的所以第三方依赖库版本和路径,子module需要依赖时在build.gradle.kts文件中使用一行函数即可引入依赖。

  • 对api模块进行统一配置,只需添加api模块的名称及其实现模块路径的字符串即可,其背后使用ApiPathSaver类解析api路径,便于以后单模块调试时对api模块依赖的引入。

Hilt依赖注入

依赖注入可以帮助项目代码进一步解耦,当我们需要使用到某个类的实例时不需要手动生成,而是通过控制反转的方式注入目标对象的实例。

在本项目中,我们主要使用了以下几种依赖注入的方式:

  1. lib_common模块向上层模块提供统一的OkHttp和Retrofit的单例。

  2. 在Repository层,对本地仓库层提供模块范围内Room中Database实例的依赖注入,对远程仓库层提供使用Retrofit创建的具体service实例的依赖注入,对具体业务对应的仓库层提供本地和远程仓库层实例的依赖注入。

  3. 在ViewModel层,我们对具体页面所持有的ViewModel提供相应业务仓库层实例的依赖注入和SavedHandler的依赖注入。

ARouter

ARouter对于多模块项目的模块间通信和服务注册功能的实现有很大的帮助。

  1. 模块间通信:当我们需要从一个模块的界面跳转到另一个模块的某个界面时,使用ARouter的navigation方法实现,可以携带参数,也可设置切换动画。除此之外,我们会在lib_common模块内的RouteTable.kt文件中统一配置所有路由路径。

  2. 服务注册:我们也可以使用ARouter找到某个接口的实现类,例如当业务模块需要使用到lib模块的服务时,我们只需要让业务模块依赖lib模块对应的api模块,然后通过api模块中的接口即可获取到lib模块中的实现类,极大程度上解耦了模块间通信问题。