Android組件化開發(fā)實(shí)踐(一):為什么要進(jìn)行組件化開發(fā)?

1. 前言

三國演義里開篇就說:天下大勢,分久必合,合久必分。我發(fā)現(xiàn)這話套在軟件開發(fā)上,也特別貼切。我記得我剛?cè)腴T時做java后臺開發(fā),以及后來做Android應(yīng)用程序開發(fā),剛開始都是采用中心化管理的思想,將相同的資源集中進(jìn)行管理,但是做著做著,發(fā)現(xiàn)集中管理的資源太多了,多人開發(fā)時牽一發(fā)而動全身,進(jìn)而又要對原本的項(xiàng)目進(jìn)行拆分,演變出什么SOA架構(gòu)、什么微服務(wù),以及我這里要講的Android組件化實(shí)踐。
現(xiàn)在已經(jīng)有了很多關(guān)于組件化開發(fā)的文章了,組件化原理很簡單,但是真正實(shí)施起來還是挺困難的。在最近這兩年的時間內(nèi),我曾經(jīng)主導(dǎo)開發(fā)過多個采用組件化架構(gòu)的APP項(xiàng)目,其中有對老項(xiàng)目進(jìn)行重構(gòu)的,也有一開始就采用組件化架構(gòu)的新項(xiàng)目,在這期間踩了不少坑,也積累了不少經(jīng)驗(yàn),現(xiàn)計劃將這些都記錄下來,對或者不對歡迎大家一起探討。

2. 單一工程開發(fā)模式遇到哪些痛點(diǎn)

為了便于區(qū)分,在這里我將開發(fā)模式分為2種:一種是項(xiàng)目組件化開發(fā),一種是單一工程開發(fā)模式。

  • 單一工程開發(fā)模式
    顧名思義,就是一個代碼工程(Project)對應(yīng)一個APP了,這個APP的所有業(yè)務(wù)功能都是集中在同一個工程里實(shí)現(xiàn)的。
  • 組件化開發(fā)
    簡單來說,就是將一個APP的業(yè)務(wù)功能進(jìn)行拆分,每一個功能都是一個單獨(dú)的工程,每個工程都能獨(dú)立運(yùn)行,且只包含自己的業(yè)務(wù),我們姑且叫這個獨(dú)立的功能為一個組件服務(wù),最后整個APP由多個拆分出的組件集成而成。

已經(jīng)有很多文章對什么是組件化有更詳細(xì)的介紹了,我這里就不贅述了。在講組件化開發(fā)的好處之前,我先以我的親身經(jīng)歷來講講單一工程開發(fā)模式的痛點(diǎn)有哪些。

  1. 對工程的任意修改調(diào)試都要編譯整個工程,效率十分低下;
    做APP開發(fā)時,我們需要經(jīng)常在手機(jī)或模擬器上進(jìn)行調(diào)試,而每次調(diào)試都需要對整個工程進(jìn)行編譯,然后安裝在手機(jī)上運(yùn)行。即便你只是改了一句代碼,或是UI調(diào)整了一個像素點(diǎn),同樣需要完整的編譯工程。當(dāng)工程代碼越來越多時,編譯也會越來越慢,你可以想象一下我修改了某句代碼,編譯一下需要等待4、5分鐘才能成功運(yùn)行的場景么,那簡直讓人崩潰,嚴(yán)重影響了開發(fā)效率(想起曾經(jīng)用eclipse開發(fā)Android時,各種轉(zhuǎn)菊花,卡頓得讓人想死的心都有)。
  2. 不利于多人團(tuán)隊(duì)協(xié)同開發(fā);
    早期一個APP可能就1、2個人來開發(fā),但是隨著業(yè)務(wù)的擴(kuò)張,我們可能會發(fā)展到一個團(tuán)隊(duì)來開發(fā)一個APP,少則4、5個人,多則10幾個人甚至更多。像手機(jī)淘寶、微信、支付寶這些巨無霸APP,他們的APP開發(fā)人員估計起碼有數(shù)百個。
    以10人團(tuán)隊(duì)為例,如果10個人都是基于同一個工程的代碼拉分支進(jìn)行開發(fā),每人的開發(fā)任務(wù)雖然不同,但是都能修改整個工程的任意地方。為了適應(yīng)自己的需求,團(tuán)隊(duì)內(nèi)某人改了某句代碼,但是這個改動又有可能影響別人的開發(fā),這樣開發(fā)人員之間勢必要花更多的時間去溝通和協(xié)調(diào),沒法專注自己的功能點(diǎn)。最后進(jìn)行10個人的代碼合并時,有過這方面經(jīng)歷的人,就知道這是一件多么痛苦的事情,解決沖突解決得你要懷疑人生。
  3. 無法做到功能復(fù)用
    我曾經(jīng)做過一個項(xiàng)目,每個開通這個業(yè)務(wù)的城市,都要做一個單獨(dú)的APP,初期我們只開通了3、4個城市,需要同時發(fā)布3、4個APP,這些APP大概6、70%功能是相同的,但是都需要加入地方定制功能。如果你每個APP都采用單一工程模式開發(fā),剛開始你可能每個工程都有同樣的代碼存在,只需要復(fù)制拷貝一下就行,但是如果有需求要對這些進(jìn)行修改時,你必須得每個工程都逐一修改一遍,然后每個APP都測試一遍,工作量直接翻了數(shù)倍。
  4. 業(yè)務(wù)模塊間耦合嚴(yán)重
    采用單一工程模式開發(fā)項(xiàng)目,到最后勢必會造成業(yè)務(wù)模塊高度耦合,可以說是你中有我、我中有你,修改任何業(yè)務(wù)都有可能導(dǎo)致牽一發(fā)而動全身,這顯然是不利于后期項(xiàng)目功能維護(hù)以及迭代開發(fā)的。

3. 為什么要進(jìn)行組件化開發(fā)

前面都是我在單一工程開發(fā)模式下碰到的問題,已經(jīng)嚴(yán)重影響了我們團(tuán)隊(duì)的開發(fā)效率以及質(zhì)量,所以我才極力推崇組件化開發(fā)方式。它解決了我上面的所有痛點(diǎn):

  1. 極大提高工程編譯速度
    進(jìn)行組件化拆分后,每個業(yè)務(wù)或者功能都是一個單獨(dú)的工程,這個單獨(dú)的工程可以獨(dú)立編譯運(yùn)行,拆分后的工程通常都比較小,代碼量也比較少,我再也不用像以前編譯一下得等待好幾分鐘了。
  2. 業(yè)務(wù)模塊解耦,有利于多人團(tuán)隊(duì)協(xié)作開發(fā)
    業(yè)務(wù)組件之間不能相互引用,每個組件都把對應(yīng)的業(yè)務(wù)功能收斂在一個工程里,彼此互不打擾。 在多人團(tuán)隊(duì)里,每個人只負(fù)責(zé)自己的業(yè)務(wù)模塊,他對業(yè)務(wù)功能的增刪改查,都只限定在自己的這個業(yè)務(wù)模塊里,不會影響其他人的業(yè)務(wù),他代碼質(zhì)量的好壞也只會影響到自己的業(yè)務(wù)模塊;對測試來說,也十分方便,大部分情況下,我們只需要著重測試修改過的業(yè)務(wù)組件即可,而不用老是進(jìn)行全部回歸測試。
  3. 組件化是功能重用的基石
    業(yè)務(wù)組件類似一個個積木一樣,我們可以用積木搭建出不同的房子,同理我們也可以創(chuàng)建多個不同的APP。我們只需要維護(hù)好每個組件,需要用到該組件的功能時,一建引用集成就可以了。

當(dāng)然,組件化并不是說只有好處沒有壞處,例如:

  • 組件化開發(fā)前期可能要花費(fèi)更多的時間來進(jìn)行模塊拆分;
  • 一個人的小項(xiàng)目完全沒必要組件化開發(fā),那樣只會給自己帶來更多的工作量;
  • 組件化可能會帶來更多重復(fù)的代碼;
  • 組件化需要良好的架構(gòu)設(shè)計,包括怎么拆分業(yè)務(wù),組件之間怎么通信等等,需要有個高水平的架構(gòu)師統(tǒng)籌全局,經(jīng)驗(yàn)不足的同學(xué)盲目進(jìn)行組件化反而會適得其反,帶來更多的麻煩;

4. 小結(jié)

本文描述了單一工程開發(fā)與組件化開發(fā)的優(yōu)缺點(diǎn),這些都是在實(shí)際工作過程中的一些感悟。需要注意的是,我們并不要為了組件化而組件化,我們要根據(jù)實(shí)際情況來決定。如果組件化帶來的好處遠(yuǎn)大于單一工程開發(fā),那你就大膽使用組件化開發(fā)方案吧。

系列文章
Android組件化開發(fā)實(shí)踐(一):為什么要進(jìn)行組件化開發(fā)?
Android組件化開發(fā)實(shí)踐(二):組件化架構(gòu)設(shè)計
Android組件化開發(fā)實(shí)踐(三):組件開發(fā)規(guī)范
Android組件化開發(fā)實(shí)踐(四):組件間通信問題
Android組件化開發(fā)實(shí)踐(五):組件生命周期管理
Android組件化開發(fā)實(shí)踐(六):老項(xiàng)目實(shí)施組件化
Android組件化開發(fā)實(shí)踐(七):開發(fā)常見問題及解決方案
Android組件化開發(fā)實(shí)踐(八):組件生命周期如何實(shí)現(xiàn)自動注冊管理
Android組件化開發(fā)實(shí)踐(九):自定義Gradle插件
Android組件化開發(fā)實(shí)踐(十):通過Gradle插件統(tǒng)一規(guī)范

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,900評論 2 59
  • Android組件化項(xiàng)目地址:Android組件化項(xiàng)目AndroidModulePattern Android組件...
    半灬邊灬天閱讀 2,996評論 4 37
  • 計算機(jī)二級我報的是二級MS OFFICE高級應(yīng)用,最后90分通過。 科目選擇上,個人覺得MS Office高級應(yīng)用...
    沙耶加你好啊閱讀 1,885評論 0 0
  • 遇到一個或幾個交心的朋友,要珍惜,要寬容,要大度,真正替你著想的能有幾人,且過且珍惜。
    思維無限的貓閱讀 207評論 0 0

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