对android组件化的一些思考

组件化

当下安卓的组件化方案可谓是五彩斑斓,为多人大规模并行开发带来的极大的便利,优点有以下几点:
1,最大程度实现代码复用;
2,代码层次清晰,工程结构有条理;
3,提高多人协作开发效率;
4,易扩展,降低耦合;
但是要实现组件化基本有以下要求:
1,代码解耦,将一个大工程进行合理拆分成一个个独立的组件;
2,组件的单独运行与调试,每一个组件都可以做到单独运行和调试;
3,组件通信,组件之间的数据通信,UI跳转等;
4,代码和资源的隔离,将每个组件中的逻辑功能实现代码和资源进行完全隔离开;

代码解耦

要实现代码解耦,需要对现有业务有一个完成的轮廓,现有组件化方案基本都会把结构大致分为几个大的层次:app壳,业务组件,功能组件。
app壳:该层主要对组件进行组合打包apk等逻辑;
业务组件(纵向):该层主要是对应和应用强相关的一些业务逻辑实现和处理,比如一些登录组件,消息组件,订单组件,个人信息组件等等,是和应用具有强依赖关系的组件;
功能组件(横向):该层次基本都是一些脱离具体业务,侧重某一向功能的组件,比如网络,日志打点,消息推送,分享,支付等等,都是一个通用的功能组件,不限于某一个app,强调的是实现某一功能;
所以,从以上可以看出,功能组件是基础,如果一个公司具备完善的功能组件,那么它就会有快速构建app的能力,业务组件基本都是依赖于需求的,脱离了需求,业务组件的价值就得不到体现,但是具体该怎样拆分,还需要对整个业务非常熟悉;app壳属于最上层,对业务组件进行选择性打包,具体是否需要某一个业务组件取决于当前的公司需求是否需要。当然功能组件基本都会有许多开源的框架可供选择,并不需要我们从零开始,但是,对于一个更成熟的公司,要高瞻远瞩,因为技术在不断更新,就拿网络库来说,从android-async-http,volley,okhttp,retrofit,同样是网络库,可能公司不同部门会选用不同的网络库,如果某一天需要将多个app打造成聚合app,进行合并,那将是非常痛苦的,所以,最好的方式是公司实现一套自己的一套网络接口功能组件,具体实现对外屏蔽,只暴露接口,这样,可以方便的进行管理,也为后期解除的后患。

组件的单独运行与调试

拆分的组件如果不能单独的运行和调试,岂不是很痛苦,所以,让每个组件可以单独运行和调试非常重要,当然现有的一些组件化方案已经给了很好的实现方案,不必多说。但是组件的调试又分为组件内部调试,和组件之间联调,内部调试更好处理一些,我们只要能够处理好组件从application到libray的转换即可,当然调试的时候我们会需要自己的启动入口Activity,application等,或者是一些调试的类,一个更好的处理方式是我们可以借助微信pins工程的思想,将我们需要调试的代码和资源单独出来,通过sourceset去动态设置是否需要将调试代码和资源进行编译;当组件作为library时我们又可以将调试的代码和资源隔离开;组件之间联调可能会显得比较麻烦一些,一个可行的办法就是借助app壳工程,将必要的组件进行打包,但是一个组件的运行可能还会涉及到登录态等一些限制,所以这些都需要提前准备好。

组件通信

为了实现组件之间的通信,现在基本都会采取路由的方式实现UI的跳转,不管哪种路由,适用自己就好,组件之间的数据通信,也有很多通用的消息通信框架,或者是接口+数据结构,但是这里有一个问题就是,比如组件A依赖组件B的服务,依赖B的某个类,通常都是将接口或数据结构下沉到基础库或者公共库里面,到后期必然会造成基础库爆炸式增长,许多类过度集中到基础库中的问题会越来越严重,那么如何才能够避免这种情况,让基础库去中心化呢?Android组件化方案及组件消息总线modular-event实战给了一个比较好的实现方案,每个业务组件都划分成了Export Module+Implement Module的模式,将接口和实现完全隔离开,感觉思路很不错,当然如果你觉得这种做法比较隔离级别比较重,那么我们也可以通过微信p工程一样去进行隔离,我们发布两个版本,一个是Export版本,对外提供接口和数据结构让别人可以依赖,在发布一个Implement 版本,进行具体的实现逻辑。当然我们也可以借助ServiceLoader的思想将所有接口和实现类进行配置,为了降低所依赖的数据结构类的数量,最好的方式是我们可以使用android特有的message,bundle或者是一些集合类等进行一些简单参数数据的传递。

代码和资源的隔离

在对基础库中去中心化的过程中,我们通过只依赖其他的接口和数据结构已经很好的隔离了代码,但是对于资源来说还有一些问题就是资源冲突,为了规避资源冲突,我们可以在命名上进行一些约定,比如所有资源文件以module名开头

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容