模块化、插件化和组件化

Kalika ·
更新时间:2024-11-14
· 861 次阅读

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

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

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

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

具体到 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,方便起见我们也统一称为主项目。


作者:shenxiaolinil



模块 插件 模块化

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章