模塊化、組件化和插件化的區別

單工程模式

移動開發誕生,我們開發移動項目,我相信大多用的是單工程單任務的開發模式,二話不說,直接就開始寫起,是不是這樣呢? new Project -> 分包 -> 寫起。我相信都經歷過,也寫的比較爽,爲什麼呢? 這種模式不涉及亂七八糟的處理方式, 上手快,開發快,足夠敏捷。那麼原因是什麼呢?Mobile Project 剛起步,項目都偏小,一些附加業務還沒綁到App上。

模塊化

Android Studio出來了,多出來了一個新的概念, Project, Module… 模塊;當時以包的形式分離的公共包common,現在成了AS中的Module。大家都知道,Module包含兩種格式: application, library。也就是說,一個Module就是一個小的項目,也是AS概念中的模塊。因此我們開始設計common模塊, common_business模塊,甚至db模塊。模塊的好處是什麼? 相比於包來講,模塊更靈活,耦合更低,隨意插拔,想引入哪個就引入哪個。根據不同的關注點,將一個項目的可以共享的部分抽取出來,形成獨立的Module,就是模塊化。模塊化不只包含公共部分,當然也可以是業務模塊。

組件化

平時看看論壇,好多人都在問: 模塊化和組件化有什麼區別? 到底有什麼區別呢,其實很小;但並不是完全相同的概念。 通過以上模塊化的概念講述,應該對模塊化有了一個瞭解,那麼區別是什麼呢?

組件化是建立在模塊化思想上的一次演進,一個變種。組件化本來就是模塊化的概念。但是組件化的核心是
什麼? 是模塊角色的可轉換性。是的,就是可轉換性。

組件化的核心是角色的轉換。 在打包時, 是library; 在調試時, 是application。

怎麼理解組件化的概念 ?

Module的模式分兩種, application和library。 library就是引用庫,如你抽取的common。 application就是一個apk, 是一個完整的項目。

在調試時,我只關心我負責的模塊,我希望我的模塊是一個單獨的app,因爲這樣更小,業務更專一,相對來講修改與調試就會越省時省心,編譯就會越快。試想當你需要改一段代碼,既要關注自己的,也要關注別人的,是一種什麼體驗 ? 或者, 編譯一個項目10M的代碼和一個工程全部1G的代碼,哪個比較舒服一些?

插件化

又有人問了: 插件化和組件化又有什麼區別呢?插件化嚴格意義來講,其實也算是模塊化的觀念。將一個完整的工程,按業務劃分爲不同的插件,都是分治法的一種體現。化整爲零,相互配合。,越小的模塊越容易維護。 插件化按理也算是模塊化的一種體現,和組件化就不一個概念了。那麼,到底有什麼區別呢?

組件化的單位是組件(module)。
插件化的單位是apk(一個完整的應用)。
組件化實現的是解耦與加快編譯, 隔離不需要關注的部分。
插件化實現的也是解耦與加快編譯,同時實現熱插拔也就是熱更新。
組件化的靈活性在於按加載時機切換,分離出獨立的業務組件,比如微信的朋友圈
插件化的靈活性在於是加載apk, 完全可以動態下載,動態更新,比組件化更靈活。
組件化能做的只是, 朋友圈已經有了,我想單獨調試,維護,和別人不耦合。但是和整個項目還是有關聯的。
插件化可以說朋友圈就是一個app, 我需要整合了,把它整合進微信這個大的app裏面
其實從框架名稱就可以看出: 組 和 插。
組本來就是一個系統,你把微信分爲朋友圈,聊天, 通訊錄按意義上劃爲獨立模塊,但並不是真正意義上的獨立模塊。
插本來就是不同的apk, 你把微信的朋友圈,聊天,通訊錄單獨做一個完全獨立的app, 需要微信的時候插在一起,就是一個大型的app了。
插件化的加載是動態的,這點很重要,也是靈活的根源。

以上是對三個思想的解析,相信應該能明白不同的概念的具體意義和區別在哪了。在《關於移動架構的思考與總結》中我指出,所謂架構,無非兩個方面: 分層和通信方式。 其實廣義的架構也可以說是這兩個方面:子模塊(子系統)劃分和通信。

子模塊劃分

除了大家公認的common部分, 業務模塊的劃分尤爲重要,相比於狹義上的架構,廣義上的子系統的劃分的關注點,很考驗技術經驗以及對業務的理解。

通信方式

模塊化的通信方式,無非是相互引入;我抽取了common, 其他模塊使用自然要引入這個module
組件化的通信方式,按理說可以劃分爲多種,主流的是隱式和路由。隱式的存在使解耦與靈活大大降低,因此路由是主流
插件化的通信方式,不同插件本身就是不同的進程了。因此通信方式偏向於Binder機制類似的進程間通信

希望這些能對你有所幫助!
————————————————
版權聲明:本文爲CSDN博主「fepengwang」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/fepengwang/article/details/80533301

我做的一個組件化Demo : http://github.com/gh7800/WanAndroid

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章