什麼是模組化,元件化, 外掛化?
單工程模式
移動開發誕生,我們開發移動專案,我相信大多用的是單工程單任務的開發模式,二話不說,直接就開始寫起,是不是這樣呢? 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機制類似的程式間通訊
希望這些能對你有所幫助!
相關文章
- [Android] 元件化 & 模組化 & 外掛化演進Android元件化
- [譯] 什麼是模組化 CSS?CSS
- 什麼是前端模組化?前端模組化開發到底有無必要前端
- [Android元件化]AAB外掛化架構Android元件化架構
- vscode外掛-flutter業務模組化管理VSCodeFlutter
- Vue.JS基礎- 外掛、模組化Vue.js
- iOS的元件化(模組化)之路iOS元件化
- 關於模組化、元件化的理解元件化
- 純原生元件化-模組化的探索元件化
- 工程化、模組化、元件化 開發工作中這三項有什麼區別元件化
- Android模組化與元件化–多模組區分編譯Android元件化編譯
- WEB 前端模組化都有什麼?Web前端
- 模組化打包工具-Webpack外掛與其他功能Web
- 【JavaScript】淺談前端模組化與元件化JavaScript前端元件化
- Android外掛化原理(一)Activity外掛化Android
- 聊聊MVC和模組化以及MVVM和元件化MVCMVVM元件化
- 區塊鏈為什麼模組化?區塊鏈
- 元件化開發和模組化開發概念辨析元件化
- iOS 元件化/模組化架構設計實踐iOS元件化架構
- 前端為什麼需要模組化開發前端
- 為什麼JavaScript需要模組化開發?JavaScript
- 是什麼讓我開始了元件化?元件化
- 切圖崽的自我修養-模組外掛化書寫方式
- webpack+jquery 元件化、模組化開發的解決方案WebjQuery元件化
- 什麼是外掛?
- Webpack之模組化優化Web優化
- Android模組化改造以及模組化通訊框架Android框架
- 1、什麼是模組化,為什麼要模組化? 2、衡量模組獨立的定性標準是什麼?用自己的話表達其含 義 3、如何理解資訊隱藏和區域性化?用自己的話或者例子表達 其含義
- JavaScript模組化JavaScript
- 前端模組化前端
- JS模組化JS
- ES6 模組化與 CommonJS 模組化區別JS
- CSS 如何模組化,工程化CSS
- 什麼是虛擬化?
- Android 基於註解IOC元件化/模組化的架構實踐Android元件化架構
- #0 初識外掛化
- Android外掛化開篇Android
- 淺析Android外掛化Android