簡(jiǎn)單談?wù)剬?duì)模塊化、組件化、插件化以及熱修復(fù)的理解

個(gè)人博客地址 http://dandanlove.com/

前言

Android隨著系統(tǒng)的升級(jí)和app自有業(yè)務(wù)的增漲,新技術(shù)的不斷涌現(xiàn)。在這個(gè)好多技術(shù)還沒(méi)學(xué)習(xí)就已過(guò)期的時(shí)代。雖然不能去吃透那些前輩的作品,但是技術(shù)的史上我們作為碼農(nóng)應(yīng)該要了解,畢竟曾經(jīng)出現(xiàn)的一個(gè)個(gè)技術(shù)名詞都代表“成長(zhǎng)”。

GoStraight.jpg

----------------2021:10:14----------------
從上面的概述來(lái)看其實(shí)組件化跟模塊化沒(méi)有明顯的區(qū)別;一個(gè)登錄功能可以是一個(gè)模塊也可以是一個(gè)組件,一個(gè)日期選擇控件可以是一個(gè)模塊,也可以是一個(gè)組件,因?yàn)椴还苁悄K化還是組件化,它們都有一個(gè)共同的目標(biāo):將一個(gè)大的軟件系統(tǒng)細(xì)化成一個(gè)個(gè)模塊或者組件,都是為了重用和解耦。因此沒(méi)有一個(gè)明確的界線去區(qū)分它們。

網(wǎng)上很多文章對(duì)于組件和模塊的定義也是不盡相同的,一些人認(rèn)為組件的粒度更細(xì),它只是具備單一功能與業(yè)務(wù)無(wú)關(guān)的組件,比如一個(gè)日歷選擇控件就認(rèn)為是一個(gè)組件。而模塊他們認(rèn)為就是業(yè)務(wù)模塊,顧名思義,就是按業(yè)務(wù)劃分而成的模塊。而另一部分人則相反。

在維基百科對(duì)模塊化的解釋中有這么一句:
A component is a similar concept, but typically refers to a higher level; a component is a piece of a whole system, while a module is a piece of an individual program
也就是認(rèn)為組件粒度較模塊要更大,所以本文對(duì)組件和模塊做出以下定義:

組件:側(cè)重于業(yè)務(wù),可編譯成單獨(dú)的app,一般只負(fù)責(zé)單一業(yè)務(wù),具備自身的生命周期(通常包含Android四大組件的一個(gè)或多個(gè),所以稱之為組件也更加貼切)
模塊:側(cè)重于功能,與業(yè)務(wù)無(wú)關(guān),比如自定義控件、網(wǎng)絡(luò)請(qǐng)求庫(kù)、圖片加載庫(kù)等

----------------------end--------------------

在談模塊化之前我們先看看說(shuō)組件化,現(xiàn)在大部分app隨著業(yè)務(wù)的增加都會(huì)將一個(gè)app分成多個(gè)模塊,每個(gè)模塊都是一個(gè)組件(Module)。

正常一個(gè)App中可以有多個(gè)module,但是一般只會(huì)有一個(gè)module是設(shè)置為application的,其他均設(shè)置為library,組件化開(kāi)發(fā)就是要每個(gè)module都可以運(yùn)行起來(lái),因此在開(kāi)發(fā)期間(Debug版本)每個(gè)module均設(shè)置為application,發(fā)布時(shí)(Release版本)設(shè)置為libs再進(jìn)行合并。
組件可以分為兩大類,一類是application組件,一類是libs組件,application組件是一個(gè)可運(yùn)行的app。libs組件可以作為application的依賴,但是自身不可作為程序運(yùn)行的存在。

模塊化粒度更小,更側(cè)重于業(yè)務(wù)的解耦,而組件化粒度稍大于模塊,更側(cè)重于組件的重用。

組件化:

  • 避免重復(fù)造輪子,節(jié)省開(kāi)發(fā)維護(hù)成本;
  • 每個(gè)組件都有自己獨(dú)立的版本,可以獨(dú)立的編譯,測(cè)試,打包和部署;
  • 產(chǎn)品組件化后能夠?qū)崿F(xiàn)完整意義上的按需求進(jìn)行產(chǎn)品配置和銷售,用戶可以選擇使用那些組件,組件之間可以靈活的組建;
  • 如果對(duì)外提供的接口沒(méi)有發(fā)生任何變化,升級(jí)其他組件完全不需要再進(jìn)行測(cè)試.

插件化

有了組件化為什么還要有插件化,如果我們向動(dòng)態(tài)的更新組件那么就需要插件化技術(shù)。插件化實(shí)際也是將app分為多個(gè)部分,宿主和插件能分開(kāi)編輯、并行開(kāi)發(fā),這個(gè)和組件化相同。只不過(guò)插件化考慮了插件的按需下載以及動(dòng)態(tài)升級(jí)。

APP熱修復(fù)的概念:

APP修復(fù)是針對(duì)修復(fù)app中的bug場(chǎng)景來(lái)定義的。當(dāng)我們已上線的app出現(xiàn)bug的時(shí)候,我們想在用戶不知情的情況下修復(fù)這個(gè)bug,那么就會(huì)用到熱修復(fù)。

APP熱修復(fù)的實(shí)現(xiàn)原理:

  • 首先,生成新版本的apk與舊版本的apk的差異補(bǔ)丁包文件;
  • 其次,使用熱修復(fù)框架的Api在Application中去嘗試加載指定路徑的補(bǔ)丁差異包;
  • 最后,只需要將補(bǔ)丁差異包寶貝到對(duì)應(yīng)路徑,代開(kāi)有bug的App,在Applcation創(chuàng)建的時(shí)候就會(huì)將補(bǔ)丁包文件加載到內(nèi)存中并且替換對(duì)應(yīng)的方法。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評(píng)論 25 709
  • 今天來(lái)回味下組件化和模塊化,這2種說(shuō)法時(shí)一回事,當(dāng)然還是有區(qū)別的,下面再詳細(xì)說(shuō),其實(shí)很簡(jiǎn)單,只是設(shè)計(jì)范圍的不同,也...
    前行的烏龜閱讀 49,473評(píng)論 6 94
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 劉溪,遠(yuǎn)大住工國(guó)際;國(guó)學(xué)踐行23期學(xué)員,24期奉獻(xiàn)者,六項(xiàng)精進(jìn)299期同修【知~學(xué)習(xí)》 【日精進(jìn)第33天】 《六項(xiàng)...
    西西_3e45閱讀 94評(píng)論 0 0
  • 題目: Write a program that outputs the string representatio...
    樂(lè)正君Krizma閱讀 213評(píng)論 0 0

友情鏈接更多精彩內(nèi)容