[Android] 组件化 & 模块化 & 插件化演进

你们好,我系苍王。
java

如下是我这个系列的相关文章,有兴趣能够参考一下,能够给个喜欢或者关注个人文章。git

[Android]如何作一个崩溃率少于千分之三噶应用app--章节列表网络


写了二十多篇的简书,到这里已经写了不少关于不少组件化内容的文章,可是不少对组件化,模块化,插件化的概念仍是不理解。架构

不少同窗,都以为如何划分模块,如何划分组件,如何作隔离解耦,如何作分层产生了疑虑,有些时候无从下手。app

这里仍是须要给你们普及一下概念性的说明吧。框架


一.组件化

关于组件化,看过我第一编开篇文章的,会看到这个图。socket

这个图实际上是咱们组件化入门所接触到的图,这样简单的分明的分层。模块化


基础组件化图

(1)base module集成基础用到的组件svn

(2)一个组件意为着一个业务组件化

(3)App module是统筹每一个的集成层。

这是最基础最简陋的组件化工程,比较适合中小型开发项目架构。其基础的接口,例如存储io,图片等,须要轻量级封装,只须要使用一个类封装就能够了。而业务独立简单,只须要一个base module便可以完成基础依赖。


二.模块化

架构都是从基础演化的,随着业务量的增长,就会发现层级有点不够用了,业务须要更加细分,而后就进化到模块化的模型。

这是我理解的模块化。

这里很清晰能够看到我将模块化分为5层模型。


模块化模型图

(1)应用层是生成app和初始化操做的加载

(2)模块层,每一个模块至关于一个业务,经过module来分隔开每一个业务的逻辑。

(3)基础层,基础组件的整合,提供基础组件能力给业务层使用。

(4)组件层,经过图片加载,网络http,socket等基础功能划分为一层。

(5)基础库层,更加基础的库类依赖,此层非必须,例如(Rxjava,EventBus等一些代码结构优化的库),还有本身编写的封装类。

这里业务层,调试以前gradle组件化优化和组件化数据分享都有给你们介绍。

基础库层,这个层是能够转移到基础层和组件层混合的中,这样能够减小层级,因此为虚线。

这个结构适合中型app的搭建,当你在第一种组件化架构有相对的沉淀,发现业务须要从新细分重构的时候,能够考虑这种架构方式。其要求组件独立复用,模块也能够独立复用。而其组件集合和模块关联就是依赖于一个Base module来完成。

还有模块化更进一步架构方式和需求,之后有机会再给你们介绍。


三.插件化

当业务层相对独立后,分层已经很是稳定。

国内Android App大环境(做为用户,用户都贪新忘旧的,每一星期半个月就从新下载app,谁受得了。)。这种环境下,中国黑科技热更新就变为了常态。热更新催生出插件化开发。·

那么架构只能再次进化。

依然是沿用上面的5层模型。


插件化模型图

咱们能够看到上面的插件化模型。

(1)组件层里面须要添加插件框架,如Small,Atlas,DroidPlugin等等,至于选型以前有推荐一系列的文章。

(2)开发模块层,其业务分块至关于一些大型的业务做为独立的插件,例如地图,直播间,活动,第三方嵌入等。做为单独的研发分支(svn,git工程),这样做为基础项目研发,就保有其模块的独立性,最大程度解耦。

(3)应用层,对应着宿主App(不知道的,就去补插件基础去吧),一些很是基础的业务如登陆,支付等须要帐号等数据最好集成到这里。固然若是公司对于这些分块必定有很好的解决能力和条件。宿主App至关于只是一个壳,包装加载所有的插件App仍是没问题的。


这样的架构,适合模块迭代,有一个小组来完成便可小工程,并且能够脱离原来大工程的研发。可是这里须要注意的一点,须要很是当心的设置base module里面的模块间通讯。举个例子,假若用RxBus来通讯,其每次都须要添加一个新的类,那么每次都须要更改添加到base module,那么其架构是很是不稳定,更新也是不容许向前兼容,并且模块多了,功能叠加会形成类爆炸。除非重构,接口的设计向前兼容,那么旧的接口就不能做过多的修改,不能删除和更改参数,只能增长。因此这里请各位架构师必定要思考清楚之后的重构难度。


这里还给出插件化运行模型。


插件化运行模型

插件化,研发阶段考虑的问题

(1)资源冗余解决,包括对于base module的依赖和库依赖

(2)混淆相关和资源冲突

(3)插件加载方式

(4)通讯依赖,数据交互,事件触发

能够看到组件化,模块化,插件化一步步演进的过程,应该会适合你们各类大中小型项目的业务重构。


这一篇并非讲习一些研发技术,只是介绍组件化的研发思惟和扩展,给你们一种统筹的思想,更加深刻理解组件化的精粹。

到这里,同窗们是否已经感觉到对组件化架构体系是否已经有更加深入的理解了?

那么是否插件化后是否更加清晰和高效的架构呢?

我能够提示,以后将会进程化,如何实现进程化?我将会在我以后新开的系列给你们进一步讲解。敬请期待吧!!!


这一节介绍就到这里,

下一节将会更精彩,敬请期待!!!

群号是316556016,也能够扫码进群。我在这里期待大家的加入!!!

相关文章
相关标签/搜索