起源
在采用组件化之前,我负责的一个电商项目经历了1.0单模块版本、2.0多模块版本,3.0决定采用组件化来重构项目,并将项目开源,可供同样在做电商的android开发者参考、在研究android架构的同行者共同学习进步。在做之前,我们考虑三个问题,what、why和how,什么是组件化?为什么要进行组件化?如何进行组件化?
该电商项目源码请点击
什么是组件化
组件化是指解耦复杂系统时将多个功能模块拆分、重组的过程。在Android工程表现上就是把app按照其业务的不同,划分为不同的Module,每个Module可独立作为一个app运行,也可作为整个app的子模块。
为什么要进行组件化
- 为了解耦:把复杂系统拆分成多个组件,分离组件边界和责任,便于独立升级和维护
- 各个组件专注自身功能的实现,模块中代码高度聚合,只负责一项任务,也就是常说的单一职责原则;
- 各业务研发可以互不干扰、提高协作效率;
- 业务组件可进行拔插,灵活多变;
- 业务组件之间将不再直接引用和依赖,各个业务模块组件更加独立,降低耦合;
- 加快编译速度,提高开发效率
android如何进行组件化
- 在gradle.properties文件中增加常量:isModule=false
- 在各个组件模块的gradle中增加是否是组件的动态配置
if (isModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
- 如果需要独立模块运行,则将gradle.properties中的isModule置为true,否则置为false,修改后rebuild一下;当然这样只是简单实现了组件的自动拆分和重组,更详细的实现请继续往下看
电商项目组件化之路
根据电商项目的业务特点,我们设计了如下架构图
从下往上来看,依次是通用组件、业务组件、业务模块、APP壳四大层。
- 通用组件,又称业务无关组件,根据来源分为开源库和基础组件库,开源库是我们在项目中经常会用到的第三方库,比如okhttp、rx