什麼是模組化,元件化, 外掛化?

馬佔柱發表於2020-11-25

單工程模式

移動開發誕生,我們開發移動專案,我相信大多用的是單工程單任務的開發模式,二話不說,直接就開始寫起,是不是這樣呢? 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機制類似的程式間通訊

 

希望這些能對你有所幫助!

相關文章