我理解的模块化与组件化

1,089 阅读2分钟

什么是组件和模块

组件:把重复的代码提取出来合并成为一个个组件,组件最重要的就是重用(复用),位于框架最底层,可供不同模块使用。比如图表(Chart)组件,支付组件,路由组件等

模块:分属同一功能/业务的代码进行隔离(分装)成独立的模块,可以独立运行,以页面、功能或其他不同粒度划分程度不同的模块,位于业务框架层。模块间通过接口调用,目的是降低模块间的耦合。由之前的主应用与模块耦合,变为主应用与接口耦合,接口与模块耦合。

多个模块可以使用同一组件

模块化和组件化的思想是一样的,我们可以把它们当做成一个概念。


为什么需要模块化

随着业务的增多,代码变得越来越复杂,各个模块之间的代码耦合严重,代码改动十分容易其他模块的异常。

另外开发人员越来越多,原来小团队的开发方式以及不再适应了。也容易会产生代码冲突的问题。

使用模块化可以做到:

  • 模块间做到完全解耦不相互依赖
  • 多人并发开发测试
  • 可单独编译打包某一模块,提高编译速度

设计方案

上图,简单介绍了现在公司应用的架构层级结构,实际业务肯定比图上写的要复杂。

我们应用的模块化设计把应用分为四层:

基础组件层:包含第三方开源库,工具类,路由组件,图表基础组件等

业务组件层:这一层的所有组件都是业务相关的组件,图表业务组件,文案color主题组件等

业务Module层:个股模块,组合模块,图表模块,市场模块,交易模块等等。

应用Application层:应用组装,组装各个Module

模块化其实就是将独立的功能业务拆分独立成一个个业务模块,模块的划分粒度由具体模块的复杂度决定,不宜太大也不宜太小,通常一个开发人员负责一个模块或者多个。每个业务模块在 Android Studio 中的都是一个 Module,因此在命名方面我们要求每个业务模块都以 Module 为后缀 。

模块化的规则:

  • 各个Layer间禁止反向依赖,只允许上一层依赖下一层

  • 各个业务模块之间不允许相互依赖,他们之间的通讯和跳转才有底层Router路由来完成


一个简单的模块化示例

写了一个简单的模块化实例,手写了一个Router框架。有参考的价值。代码链接如下:

[代码地址](github.com/liu-mushan/…)