最近参与了APP组件化工作,这里将我这个菜鸟的一点个人经验简单总结下
-
为何要做组件化
一个大型项目动辄几十上百人开发维护,随着经年累月的开发,不可避免地会出现很多不符合设计原则的代码结构以及耦合。组件化的目的就是将一个杂乱无章的项目代码抽丝剥茧,将一些通用的代码模块化出来,将一整个main组件的代码拆分成多个下沉的组件。
-
基本思路
六大设计原则:
- 单一职责原则(Single Responsibility Principle);
- 开闭原则(Open Closed Principle);
- 里氏替换原则(Liskov Substitution Principle);
- 迪米特法则(Law of Demeter),又叫“最少知道法则”;
- 接口隔离原则(Interface Segregation Principle);
- 依赖倒置原则(Dependence Inversion Principle)。
-
什么应该下沉?
- 通用的工具类/工具方法
- 通用的配置开关、数据仓库、常量
- 算法库以及算法接口
- 通用的流程(如Camera基本流程)
注意:上述分类强调“通用”,如果是业务强相关的逻辑以及配置,建议直接跟随业务模块存放
-
如何下沉
工具模块很容易下沉,实践中的难点主要是错综复杂的耦合关系
-
步步为营。先拆解没有耦合、耦合较少的部分,如工具模块,常量模块
-
熟练运用设计模式。如通过代理模式暂时或持续解耦(暂时解耦的原因是:阶段性拆解任务需要依赖main组件。如果完成整体的组件化工作后,可以解除耦合,则可以恢复持有某些对象)
-
当断则断。业务相关的逻辑,果断踢出来存放在业务模块中
-
拆解技巧
- 运用IDE的move功能移动类、常量等。不仅能自动更新依赖关系,还能保留Git记录
- 包名、类名适当保持一致。如果包名路径和拆解前一致,依赖处则不需要变更import包名,如果存在大量的依赖,拆解后也不会有大量的文件修改记录
- 准备2个相同的项目,对照拆解