项目里面组件化开发和模块化开发都是常用手段,关于两者的区别有必要进行一下梳理。

 

概念:

组件:把重复的代码提取出来合并成为组件,功能相对单一,主要目的是重用。位于框架最底层,可供不同功能使用/依赖,独立性强。

模块:按功能/业务来进行隔离(分装)成独立的模块,在划分时需要把控颗粒度(界定模块的功能范围)。不同模块之间也会存在依赖关系(单向依赖,如module A依赖于module B,那么B不能依赖A),基本都是业务性的跳转,从地位上来说它们都是平级的。

优点:

组件:组件化的重点就是重用,提炼出一个个功能组件给不同的功能使用。由于组件自身独立性强,具有低耦合的特点。

模块:从概念中我们可以知道模块化的目的是对功能/业务进行隔离/封装,从而达到高内聚、低耦合的效果。同时,单一模块可以独立编译运行安装到用户的手机上,方便模块单独开发调试。单一模块生成的apk相对于整体APP体积小,编译时间快,能有效提升开发效率。

加深理解: 

我们模拟一个可以看直播的购物项目,运用组件化和模块化来对项目分层:

架构中组件与模块的区别_架构中组件与模块的区别

宿主层: 主要负责集成业务模块,组装成完整的APP。
业务模块层: 一般一个module对应项目中一个大的功能模块,一个项目可以按大功能拆分成多个单独的module。
业务组件层: 梳理与业务有关联,且需要多处使用的功能,将其抽离出来作为基础业务组件进行复用。比如在该购物软件中,主会场、榜单都需要用到商品搜索功能,以及分享好友的功能,这时在两个模块中都实现商品搜索和分享就会多出很多重复代码,且同样的功能变动要多处维护。
功能组件层: 项目中常用的功能库,如图片加载、网络请求等
底层SDK: 从公司项目中长期积累出来的底层类库。

总结:

类别

目的

特点

成果

架构定位

组件

重用、解耦

高重用、低耦合

基础库、基础组件

纵向分层

模块

隔离/封装

高内聚、低耦合

业务框架、业务模块

横向分块