什么是组件和模块
组件:把重复的代码提取出来合并成为一个个组件,组件最重要的就是重用(复用),位于框架最底层,可供不同模块使用。比如图表(Chart)组件,支付组件,路由组件等
模块:分属同一功能/业务的代码进行隔离(分装)成独立的模块,可以独立运行,以页面、功能或其他不同粒度划分程度不同的模块,位于业务框架层。模块间通过接口调用,目的是降低模块间的耦合。由之前的主应用与模块耦合,变为主应用与接口耦合,接口与模块耦合。
多个模块可以使用同一组件
模块化和组件化的思想是一样的,我们可以把它们当做成一个概念。
为什么需要模块化
随着业务的增多,代码变得越来越复杂,各个模块之间的代码耦合严重,代码改动十分容易其他模块的异常。
另外开发人员越来越多,原来小团队的开发方式以及不再适应了。也容易会产生代码冲突的问题。
使用模块化可以做到:
- 模块间做到完全解耦不相互依赖
- 多人并发开发测试
- 可单独编译打包某一模块,提高编译速度
设计方案
上图,简单介绍了现在公司应用的架构层级结构,实际业务肯定比图上写的要复杂。
我们应用的模块化设计把应用分为四层:
基础组件层:包含第三方开源库,工具类,路由组件,图表基础组件等
业务组件层:这一层的所有组件都是业务相关的组件,图表业务组件,文案color主题组件等
业务Module层:个股模块,组合模块,图表模块,市场模块,交易模块等等。
应用Application层:应用组装,组装各个Module
模块化其实就是将独立的功能业务拆分独立成一个个业务模块,模块的划分粒度由具体模块的复杂度决定,不宜太大也不宜太小,通常一个开发人员负责一个模块或者多个。每个业务模块在 Android Studio 中的都是一个 Module,因此在命名方面我们要求每个业务模块都以 Module 为后缀 。
模块化的规则:
-
各个
Layer
间禁止反向依赖,只允许上一层依赖下一层 -
各个业务模块之间不允许相互依赖,他们之间的通讯和跳转才有底层
Router
路由来完成
一个简单的模块化示例
写了一个简单的模块化实例,手写了一个Router框架。有参考的价值。代码链接如下:
[代码地址](github.com/liu-mushan/…)