Android 组件化、模块化、插件化区别详解

前言

组件化模块化已经深入体现到软件开发当中,也是为了让开发者更好的去解决软件上的高耦合、低内聚、无重用的3大代码问题。网上有很多相关内容的介绍文章,各个作者都有自己的一些想法或者总结,看得比较乱,在实践过程中也存在不少疑惑,很多时候不知道选择用组件还是模块,或者有时候根本分不清自己这得是组件还是模块。所以写了下这篇文章,对组件化、模块化、插件化进行一个详细的讲解,希望小伙伴都可以更了解这三者的区别。

单工程模式

再介绍组件化,模块化、插件化之前,我们不得不说下单工程模式,移动开发诞生之初,我们开发移动项目,我相信大多用的是单工程单任务的开发模式,new Project——>分包——>写起。大家应该都经历过这个过程,写起来也比较简单,这种模式不涉及乱七八糟的处理方式, 上手快,开发快,足够敏捷。这是因为Mobile Project 刚起步,项目都偏小,一些附加业务还没绑到App上,而随着后期手机应用的发展,项目越来越大,功能越来越多,随之而产生了组件化和模块化等概念。

后面Android Studio出来了,多出来了一个新的概念,Project, Module… 模块;当时以包的形式分离的公共包common,现在成了AS中的Module。大家都知道,Module包含两种格式: application,library。也就是说,一个Module就是一个小的项目,也是AS概念中的模块。因此我们开始设计common模块common_business模块,甚至db模块。模块的好处是什么? 相比于包来讲,模块更灵活,耦合更低,随意插拔,想引入哪个就引入哪个。根据不同的关注点,将一个项目的可以共享的部分抽取出来,形成独立的Module,就是模块化。模块化不只包含公共部分,当然也可以是业务模块。

组件化

基于组件的软件工程 (CBSE) 也称为基于组件的发展 (CBD),是软件工程的一个分支,它强调在给定软件系统中提供的广泛功能方面的关注点分离。它是一种基于重用的方法,用于定义、实现和组合松散耦合的独立组件到系统中。这种做法旨在为软件本身和赞助此类软件的组织在短期和长期带来同样广泛的利益。

简单来说就是:组件化就是基于可重用为目的的,将一个大的软件系统按照分离关注点的形式,拆分多个独立的组件,减少耦合。

就是“基础库”或者“基础组件",意思是把代码重复的部分提炼出一个个组件供给功能使用
使用:Dialog,各种自定义的UI控件、能在项目或者不同项目重复应用的代码等等
目的:复用,解耦
依赖:组件之间低依赖,比较独立
架构定位:纵向分层(位于架构底层,被其他层所依赖)
特点:从UI界面的角度进行划分,前端的组件化,方便UI组件的重用

模块化

模块化编程是一种软件设计技术,强调将程序的功能分离为独立的可互换模块,因此每个模块都包含仅执行所需功能的一个方面所需的一切。

简单来说就是:模块化是将功能拆分,分成相互独立的模块,以便于每个模块只包含与其自身功能相关的内容。

就是"业务框架"或者“业务模块",也可以理解为“框架”,意思是把功能进行划分,将同一类型的代码整合在一起,所以模块的功能相对复杂,但都同属于一个业务
使用:按照项目功能需求划分成不同类型的业务框架(例如:注册、登录、运动、商城等.....)
目的:隔离/封装 (高内聚)
依赖:模块之间有依赖的关系,可通过路由器进行模块之间的耦合问题
架构定位:横向分块(位于架构业务框架层)
特点:从代码逻辑的角度进行划分,方便代码分层开发,保证每个功能模块的职能单一

插件化

插件化严格意义来讲,其实也算是模块化的观念。将一个完整的工程,按业务划分为不同的插件,都是分治法的一种体现。化整为零,相互配合。越小的模块越容易维护,插件化按理也算是模块化的一种体现,和组件化就不是一个概念了。

组件化的单位是组件(module)
插件化的单位是apk(一个完整的应用)

组件化实现的是解耦加快编译, 隔离不需要关注的部分
插件化实现的也是解耦加快编译,同时实现热插拔也就是热更新

组件化的灵活性在于按加载时机切换,分离出独立的业务组件,比如微信的朋友圈
插件化的灵活性在于是加载apk, 完全可以动态下载,动态更新,比组件化更灵活

组件化能做的只是, 朋友圈已经有了,我想单独调试,维护,和别人不耦合,但是和整个项目还是有关联的
插件化可以说朋友圈就是一个app, 我需要整合了,把它整合进微信这个大的app里面

本来就是一个系统,你把微信分为朋友圈,聊天, 通讯录按意义上划为独立模块,但并不是真正意义上的独立模块
本来就是不同的apk, 你把微信的朋友圈,聊天,通讯录单独做一个完全独立的app, 需要微信的时候插在一起,就是一个大型的app了
插件化的加载是动态的,这点很重要,也是灵活的根源。

总结

组件化是基于重用,减少耦合;
模块化是根据功能模块的不同而拆分的;
插件化是将一个完整的工程,按业务划分为不同的插件。

其实组件相当于库,把一些能在项目里或者不同类型项目中可复用的代码进行工具性的封装。
而模块相应于业务逻辑模块,把同一类型项目里的功能逻辑进行进行需求性的封装。

其实从定义中可以看出,“组件” 更注重于代码的“复用”。 “模块” 更注重与一块业务能力的完整性。

组件、模块其实是从不同的角度来划分一个app。 组件更多的是从自下而上的视角,按照技术实现的思维划分实现代码,并将这些代码组装成一个app。 模块更多的是从自上而下的视角,按照业务划分实现代码。

组件化模块化的目的都是针对复杂app,降低其复杂性,提升开发效率和质量。只是划分的角度略有不同。

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

推荐阅读更多精彩内容