为什么要分层
主要是为了维持分工体系,提高生产效率。
为什么分层能提高生产效率
- 需要理解的范围从实现转向接口(面向接口编程),减少思考复杂性
- 减少依赖,加速打包
- 快速合理的下沉通用代码,减少重复开发
- 建立起合理的边界,权责分明,减少撕逼
常见层次
- 业务层:通常是最上层,面向用户、面向产品开发的代码。如直播
- SDK 层:有一定的专职业务,向业务层提供能力封装。如 push
- 工具库:非常通用的逻辑,完全脱离当前App 环境。如 widget
如何界定层次
- 通用性:
最核心的一点就是通用性,这一坨代码(Android 上下文中的 module)到底有多少人在用。以什么样的形式在用。或者说抽象等级是什么样的。- 如果全世界的 App 开发都可以使用,那这些代码应该放到工具库。更直接的思路,这些代码是可以放到 github 上,无修改给各种人用,那么大概率是工具库代码。
- 如果这些代码主要是减少重复开发(三方 push 接入)、减少专精人才的重复招聘(性能监控)。那大概率应该放到SDK 层。
- 上述代码之外的代码,自然只能放到业务层。
- 对外依赖:
- 通常工具库是不能对其他库进行依赖的。因为,依赖是逆通用性的,过多的依赖会直接导致不通用。
- 而 SDK 层是可以进一步依赖一些三方的库(接入),或者进一步在逻辑上依赖一些当前 App 或公司的技术理念或者需求(功能)。这些依赖削弱了通用性。
- 最后业务层则可以依赖全部。并没有狭义上的通用性(无修改使用)。
- 稳定性
这里的稳定性是指代码变化的频次。通常来说,通用的代码在增删改的层面上,删改是极少的(向后兼容),增是可控的。- 工具库应该是极其稳定的,发版和修改应该是严格控制的。
- SDK 层由于逻辑上依赖了技术需求,所以可能会有更高频次的修改限制,但是仍然是比较稳定的。
- 业务层非常不稳定。
- 权限和人员
对于不同的通用性,开发者需要的技能水平和代码要求是不一样的。越靠下层的代码越需要更丰富的经验、更严格的设计和 cr 流程。
总结
层次 | 通用性 | 依赖 | 稳定性 | 权限 |
---|---|---|---|---|
业务 | 差 | 全部 | 差 | 业务开发 |
SDK | 公司级 | 仅基础三方库和基础工具库(注意非全部工具库) | 基本稳定 | 平台中台开发 |
工具库 | 所有人 | 仅基础三方库 | 基本无删改,仅新增 | 平台开发 |