项目里面组件化开发和模块化开发都是常用手段,关于两者的区别有必要进行一下梳理。
概念:
组件:把重复的代码提取出来合并成为组件,功能相对单一,主要目的是重用。位于框架最底层,可供不同功能使用/依赖,独立性强。
模块:按功能/业务来进行隔离(分装)成独立的模块,在划分时需要把控颗粒度(界定模块的功能范围)。不同模块之间也会存在依赖关系(单向依赖,如module A依赖于module B,那么B不能依赖A),基本都是业务性的跳转,从地位上来说它们都是平级的。
优点:
组件:组件化的重点就是重用,提炼出一个个功能组件给不同的功能使用。由于组件自身独立性强,具有低耦合的特点。
模块:从概念中我们可以知道模块化的目的是对功能/业务进行隔离/封装,从而达到高内聚、低耦合的效果。同时,单一模块可以独立编译运行安装到用户的手机上,方便模块单独开发调试。单一模块生成的apk相对于整体APP体积小,编译时间快,能有效提升开发效率。
加深理解:
我们模拟一个可以看直播的购物项目,运用组件化和模块化来对项目分层:
宿主层: 主要负责集成业务模块,组装成完整的APP。
业务模块层: 一般一个module对应项目中一个大的功能模块,一个项目可以按大功能拆分成多个单独的module。
业务组件层: 梳理与业务有关联,且需要多处使用的功能,将其抽离出来作为基础业务组件进行复用。比如在该购物软件中,主会场、榜单都需要用到商品搜索功能,以及分享好友的功能,这时在两个模块中都实现商品搜索和分享就会多出很多重复代码,且同样的功能变动要多处维护。
功能组件层: 项目中常用的功能库,如图片加载、网络请求等
底层SDK: 从公司项目中长期积累出来的底层类库。
总结:
类别 | 目的 | 特点 | 成果 | 架构定位 |
组件 | 重用、解耦 | 高重用、低耦合 | 基础库、基础组件 | 纵向分层 |
模块 | 隔离/封装 | 高内聚、低耦合 | 业务框架、业务模块 | 横向分块 |