一文理解模塊化、組件化、插件化的區別——Android開發進階必備


從本篇開始,打算從廣義上探究一下移動架構的思想;包括現在仍然比較火熱的模塊化,組件化, 插件化等架構思想。話說在前面,本篇旨在說明當前主流架構的設計概念,讓大家了解當前的架構形式,以及主要用了什么設計思想,什么設計思路,算是引導篇...

一、模塊化,組件化,插件化

上述概念已經好久了,或許還是有一些同胞對這些概念不是很清楚,大體知道是什么,但是詳細也不知道是什么。現在來解析一下。

二、單工程模式

移動開發誕生,我們開發移動項目,我相信大多用的是單工程單任務的開發模式,二話不說,直接就開始寫起,是不是這樣呢?

new Project -> 分包 -> 寫起。我相信都經歷過,也寫的比較爽,為什么呢?

這種模式不涉及亂七八糟的處理方式, 上手快,開發快,足夠敏捷。那么原因是什么呢?Mobile Project 剛起步,項目都偏小,一些附加業務還沒綁到App上。

1、模塊化

Android Studio出來了,多出來了一個新的概念, Project, Module... 模塊;當時以包的形式分離的公共包common,現在成了AS中的Module。

大家都知道,Module包含兩種格式: application, library。也就是說,一個Module就是一個小的項目,也是AS概念中的模塊。

因此我們開始設計common模塊, common_business模塊,甚至db模塊。模塊的好處是什么?

相比於包來講,模塊更靈活,耦合更低,隨意插拔,想引入哪個就引入哪個。根據不同的關注點,將一個項目的可以共享的部分抽取出來,形成獨立的Module,就是模塊化。

當然,模塊化不只包含公共部分,當然也可以是業務模塊。

2、組件化

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

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

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

怎么理解組件化的概念 ?

Module的模式分兩種, application和library

library就是引用庫,如你抽取的common。 而application就是一個apk, 是一個完整的項目。

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

3、 插件化

又有人問了:插件化和組件化又有什么區別呢?

插件化嚴格意義來講,其實也算是模塊化的觀念。將一個完整的工程,按業務划分為不同的插件,都是分治法的一種體現。化整為零,相互配合。越小的模塊越容易維護。

插件化按理也算是模塊化的一種體現,和組件化就不一個概念了。那么,到底有什么區別呢?

組件化的單位是組件(module)。
插件化的單位是apk(一個完整的應用)。

組件化實現的是解耦與加快編譯, 隔離不需要關注的部分。
插件化實現的也是解耦與加快編譯,同時實現熱插拔也就是熱更新。

組件化的靈活性在於按加載時機切換,分離出獨立的業務組件,比如微信的朋友圈
插件化的靈活性在於是加載apk, 完全可以動態下載,動態更新,比組件化更靈活。

組件化能做的只是, 朋友圈已經有了,我想單獨調試,維護,和別人不耦合。但是和整個項目還是有關聯的。
插件化可以說朋友圈就是一個app, 我需要整合了,把它整合進微信這個大的app里面

其實從框架名稱就可以看出: 組 和 插。

組本來就是一個系統,你把微信分為朋友圈,聊天, 通訊錄按意義上划為獨立模塊,但並不是真正意義上的獨立模塊。
插本來就是不同的apk, 你把微信的朋友圈,聊天,通訊錄單獨做一個完全獨立的app, 需要微信的時候插在一起,就是一個大型的app了。

插件化的加載是動態的,這點很重要,也是靈活的根源。


以上是對三個思想的解析,相信應該能明白不同的概念的具體意義和區別在哪了。

4、子模塊划分

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

5、通信方式

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

廢話說了這么多,其實本篇作為組件化的引導篇,主要是想讓大家掌握組件化開發。網上有很多關於學習組件化開發思路的文章,組件化原理很簡單,但是真正實施起來還是挺困難的,沒有相應的實戰+源碼參考就做好踩坑的准備吧。

最近小編有幸在字節跳動高工手里扒到這份“組件化實戰學習手冊”,這位大佬主導開發過多個采用組件化架構的APP項目。現在我只想吹爆!這位大佬熬夜半個月,把積累的經驗和踩的坑都進行了總結,整理成了長達220頁的學習手冊,手冊中收錄了大廠熱門的組件化項目實戰,從新手到架構師,這份學習手冊足以。

第一章 Android組件化初識

  • 組件化和模塊化的區別
  • 組件化和插件化的區別
  • 組件化開發的優勢
  • 業務邏輯層
  • 組件化開發要遇到的問題
  • 從組件化實戰來解決問題
  • Android組件化基礎
    ……

第二章 Android組件化初探目錄

  • 組件化演示案例
    概述
    模塊化和組件化
    組件化Demo
    組件application和library動態切換
    ……
  • WanAndroid APP 組件化項目實戰附demo
    版本更新
    效果圖
    主要功能
    項目目錄結構
    主要開源框架
    ……

第三章 架構演化(大廠篇)

  • 從智行 Android 項目看組件化架構實踐
    組件化調整的原因和目標
    組件化架構調整的整體規划
    組件化架構調整中遇到的一些問題

  • 得到 App
    Android徹底組件化demo發布
    JIMU使用指南
    組件化拆分的感悟
    ……

有需要的朋友直接點擊此處的藍色字體獲取完整文檔。

  • 微信 App
    微信Android模塊化架構重構實踐
    微信Android架構歷史
    為何再次重構微信
    ……

  • 蘑菇街 App
    蘑菇街 App 的組件化實現方式
    組件生命周期管理
    殼工程
    遇到的問題
    持續集成
    周邊設施
    ……

  • 愛奇藝 App
    基於Service的IPC通信
    組件化跨進程通信的核心訴求
    Andromeda
    架構分析
    ……

  • 美團 App
    外賣客戶端容器化架構的演進
    美團外賣容器化架構全景圖
    外賣跨端容器建設
    外賣頁面容器建設
    外賣容器化架構的衡量指標
    外賣容器化架構的監控運維
    外賣容器化架構的發布能力
    ……

  • 美團Android組件化方案及組件消息總線modular-event實戰
  • 美團Android消息總線的演進之路:用LiveDataBus替代RxBus、EventBus
  • WMRouter:美團外賣Android開源路由框架
  • 美團貓眼android模塊化實戰-可能是最詳細的模塊化實戰

  • 攜程App
  • 支付寶 App
    ......

以上就是字節跳動大佬熬夜整理的220頁Android組件化實戰學習手冊,有需要的朋友直接點擊此處的藍色字體獲取完整文檔。

結語

現在組件化真的不是什么新鮮東西了,大公司都用的滾瓜爛熟,龍飛鳳舞了,也就是現在部分中型項目和小項目在組件化的路上努力。

所以同志們,組件化沒玩過的,不熟悉的趕緊搞起來,說一點,你不會組件化,發布影子工程那么對你來說就是個噩夢。從本質上來講任何技術進步都是在現實需求的逼迫下抓耳撓腮,耗盡無數頭發才想出來的。

所以呢組件化這個東西出來這么久了,頁發展了這么久了,用的人越來越多,那肯定是對我們開發大有裨益的,小伙伴們不會,不熟悉抓緊啦,要不面試問你你怎么回答呢!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM