模块化、插件化和组件化

模块化、插件化和组件化的关系

项目发展到一定程度,随着人员的增多,代码越来越臃肿,这时候就必须进行模块化的拆分。

在我看来,模块化是一种指导理念,其核心思想就是分而治之、降低耦合。

在技术开发领域,模块化是指分拆代码,即当我们的代码特别臃肿的时候,用模块化将代码分而治之、解耦分层。

具体到 android 领域,模块化的具体实施方法分为插件化和组件化。

 

 

 插件化和组件化的区别

一套完整的插件化或组件化都必须能够实现单独调试、集成编译、数据传输、UI 跳转、生命周期和代码边界这六大功能。插件化和组件化最重要而且是唯一的区别的就是:插件化可以动态增加和修改线上的模块,组件化的动态能力相对较弱,只能对线上已有模块进行动态的加载和卸载,不能新增和修改。

 

组件化和插件化的最大区别(应该也是唯一区别)就是组件化在运行时不具备动态添加和修改组件的功能,但是插件化是可以的;

与组件化的主要区别:

  • 形式上的区别,组件化的单位是module,插件化的单位是apk
  • 关注点不同,插件化更关注动态加载、热更新、热修复等‘插拔’技术。

 

如何实现组件化

要实现组件化,不论采用什么样的技术路径,需要考虑的问题主要包括下面几个:

  • 代码解耦。如何将一个庞大的工程拆分成有机的整体?
  • 组件单独运行。上面也讲到了,每个组件都是一个完整的整体,如何让其单独运行和调试呢?
  • 数据传递。因为每个组件都会给其他组件提供的服务,那么主项目(Host)与组件、组件与组件之间如何传递数据?
  • UI跳转。UI跳转可以认为是一种特殊的数据传递,在实现思路上有啥不同?
  • 组件的生命周期。我们的目标是可以做到对组件可以按需、动态的使用,因此就会涉及到组件加载、卸载和降维的生命周期。
  • 集成调试。在开发阶段如何做到按需的编译组件?一次调试中可能只有一两个组件参与集成,这样编译的时间就会大大降低,提高开发效率。
  • 代码隔离。组件之间的交互如果还是直接引用的话,那么组件之间根本没有做到解耦,如何从根本上避免组件之间的直接引用呢?也就是如何从根本上杜绝耦合的产生呢?只有做到这一点才是彻底的组件化。
  • 因此在开发期间(Debug版本)每个module均设置为application,发布时(Release版本)设置为libs再进行合并。

 

基本概念

使用IDE中的multiple module这个功能,我们很容易把代码进行初步的拆分。在这里我们对两种module进行区分,

  • 一种是基础库library,这些代码被其他组件直接引用。比如网络库module可以认为是一个library。
  • 另一种我们称之为Component,这种module是一个完整的功能业务模块。比如读书或者分享module就是一个Component。

  为了方便,我们统一把library称之为依赖库,而把Component称之为组件,我们所讲的组件化也主要是针对Component这种类型。而负责拼装这些组件以形成一个完成app的module,一般我们称之为主项目、主module或者Host,方便起见我们也统一称为主项目。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值