随便谈谈组件化~

前言

最近事情好多,好久没动笔了,不过最重要还是自己懒了。人一但有了惰性,就真的是一拖再拖。好了,说了几句废话,来说说今天要写的主题--组件化开发

组件化定义

相信组件化开发大家都有接触,所谓组件化开发就是把功能尽可能的独立出来,组件间解耦,这样更利于团队协作及后期改造。那这和模块化有什么区别?其实没什么区别,我个人理解都是为了逻辑重用和解耦,但要说区别,组件化比模块化更彻底一些,模块化更像是一个项目中的,就像在项目中建立了多个Module,逻辑上区分了多个模块,但在代码里是直接依赖的。组件化则每一个组件单独成一个项目,单独编译运行,也就是项目对组件的依赖是aar或jar级别的,编译后的依赖,而模块化是代码直接依赖。这只是我个人理解,不喜勿喷。

为什么要组件化

以前开发一个App都是直接起一个项目,在里面玩命加功能,结果特别臃肿,后面改bug加功能都十分痛苦,牵一发而动全身,相信初始阶段大家都有过类似的经历。特别是去到一个公司,公司里有大量「祖传代码」并且没有好好规划代码结构时,那真的是怎一个『苦』字了得。

总结一下组件化好处:

  1. 可以分小组并行开发不同的组件,因为组件间解耦,提高开发效率;
  2. 组件可单独运行、单独测试,修改组件不会轻易引起其它组件的问题,项目质量也会有所提高;
  3. 最终的App只是选择组装各个组件,按需加载,对于产品化的公司很有好处,可随时根据需求快速发布多款App。

组件化实践

组件化首先肯定是要将功能模块化的,在模块化的基础上再好好分层,解耦。

刚开始做模块化,会把功能单独好,但是依赖关系会比较乱,最后可能会变成网状的依赖,导致无法把每个功能单独出来运行。

整理后应该是这样的(层次清晰,上层依赖下层,同层之间不相互依赖):


APP架构.png

Github上已经有很多关于组件化的开源实现,比如 ModularizationArchitectureARouter等等。核心原理就是增加一个路由层,由路由去帮各个组件跑腿通信,这样可以实现组件间解耦,只对路由进行依赖。大家细看会发现,由于要完全解耦,所有开源的组件化框架都是基于一个Action,也就是一个字符串来进行通信的。这就要求每个组件把它的功能Action写成文档提供出来,把所有Action对应的功能参数写出来,因为参数也是通过一个Map进行传递的,这样会导致要调用其它组件时,需要去看文档找到对应Action才能调用,而且对于阅读代码的人来说,也不知道这个Action代表什么意思,没有办法自解释。

我这里提出了一个理念,也在项目中实践了,在解耦和方便之间取了一个折中。大家都知道,调用方最希望的就是可以直接调用,不需要调用一个就看一次文档,可以直接在代码中由IDE提示这个组件能提供什么功能,而且参数是什么类型,多少个参数。要做到IDE提示,那就需要涉及API调用了。我的项目中是这么实现的:

同样定义一个通信用的路由,另外定义了一个组件功能定义模块,所有组件都要依赖路由和功能定义模块,这样组件间调用时可以通过路由去直接通过API去调用了。
比如定义一个设置组件功能:


功能定义.png

对于组件功能定义模块,也定义为一个组件,每次增加组件或更新组件对外提供的功能时,就需要修改这个组件功能定义模块。劣势就是每次增加组件,都要在这里添加一个接口定义,好处就是调用者可以很方便地知道每个组件提供哪些功能,接口参数是什么,是在代码中自解释的,不需要去查看每个组件的文档了。

其它组件调用时就可以方便时由IDE提示了:


111.png

总结

这里主要提出了一个区别于网上组件化框架的点,避免使用字符串去进行组件间交互,这样会不好理解也容易出错。替换方案就是使用接口定义,方便在IDE中提示并且代码自解释。目前我的项目在实践中,还没有发现什么坑,有坑就填吧,毕竟是自己挖的!!如果有其它好的方案欢迎拍砖~

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

推荐阅读更多精彩内容