参考文章:https://www.jianshu.com/p/1b1d77f58e84
1.1 什么是组件化?
组件化简单概括就是把一个功能完整的App或模块拆分成多个子模块, 每个子模块可以独立编译和运行, 每个模块既不相互依赖但又可以相互交互, 遇到某些特殊情况甚至可以进行升级或者降级。
1.2 为什么要实现组件化?
对于团队开发来说,项目发展到一定程度,业务越来复杂,人员越来越多,代码也越来越臃肿,因此每个人在写新需求或者改老需求的时候都有严重的代码包袱,瞻前顾后,花费在熟悉之前的代码的时间甚至大于新需求的开发时间。并且每个改动都需要测试人员进行大范围的回归,整个开发团队的效率都受到了影响,不利于整体团队健康的开发环境。
而实现组件化后,不仅降低了代码编译时间,对于需求变动,开发考虑的问题大大减少,测试小姐姐也不用大面积验证回归,另外更重要的是,由于可插拔式配置模块,不同的app都可以按需求搭配各个组件模块,组件之间也可以复用,避免了重复造轮子。
1.3 组件化与插件化的区别
一套完整的插件化或组件化都必须能够实现单独调试、集成编译、数据传输、UI 跳转、生命周期和代码边界这六大功能。
插件化和组件化最重要而且是唯一的区别的就是:组件化在运行时不具备动态添加和修改组件的功能,但是插件化是可以的,换句话说就是,组件化主要针对开发团队本身对功能的划分、组装拆卸,使得手上开发的业务代码充分解耦,互不影响,方便的是开发团队本身。而插件化指的是在运行期(线上)动态的增加、修改APP的功能或者模块,而这些操作导致的功能变化,用户不用做任何操作,也就是说,方便的是用户。一般说来,电商类或广告类产品对插件化需求比较强烈,例如天猫11.11 00:00时开启双11活动,很明显整个App的UI、功能都已经发生了巨大的变化,这些就是插件化或类似于插件化的技术在用户手机上所发挥的作用。(总不能让用户在11.11 00:00时更新下载App才能参加双11吧)。
1.4 组件化与插件化如何取舍
在插件化和组件化取舍的一个重要原则是:APP 是否有动态增加或修改线上模块的需求,如果这种动态性的需求很弱,就不需要考虑插件化,选择组件化就好了。
如果产品对动态性的要求比较高,那么在选择插件化之前也需要从两个方面权衡一下。一是插件化不可避免的去 hook 一些系统的 api,也就不可避免地有兼容性的问题,因此每个插件化方案需要有专门的团队去负责维护;二是从一个业务逻辑复杂的项目中去拆分插件化需要的时间可能是非常巨大的,需要考虑对开发节奏的影响。
因此,对大多数产品来说,组件化都是一个不错甚至最佳的选择,它没有兼容性,可以更方便地拆分,并且几乎没有技术障碍,可以更顺利地去执行。特别是对急需拆分的产品来说,组件化是一个可退可守的方案,可以更快地执行下去,并且将来要是迁移到插件化,组件化拆分也是必经的一步。
1.5 iOS 和 Android 的组件化有何区别
组件化更多的体现的是一种项目分层思想,无论是 Android 还是 iOS,要解决的问题都是一样的,因此在组件化方案上要实现的功能也都是一样的,两者的组件化大体上来说是基本相同的。
有一个微小的区别在于技术实现方式的不同,由于两个平台用到的开发技术是不同的,Android 的组件化可能需要考虑向插件化的迁移,后期一旦有动态变动功能的强需求,可以快速地切换。而目前苹果官方是不允许这种动态性的,所以这方面的考虑就会少一点。但是 iOS 同样可以做到动态地加载和卸载组件的,因此在诸如生命周期、代码边界等问题上也需要格外注意,只是目前一些 iOS 组件化方案在这方面可能考虑的相对少一点。
下一篇:組件化架构
网友评论