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

1. 前言

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

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

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

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

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

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

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

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

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

當然,組件化并不是說只有好處沒有壞處,例如:

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

4. 小結(jié)

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

系列文章
Android組件化開發(fā)實踐(一):為什么要進行組件化開發(fā)?
Android組件化開發(fā)實踐(二):組件化架構(gòu)設(shè)計
Android組件化開發(fā)實踐(三):組件開發(fā)規(guī)范
Android組件化開發(fā)實踐(四):組件間通信問題
Android組件化開發(fā)實踐(五):組件生命周期管理
Android組件化開發(fā)實踐(六):老項目實施組件化
Android組件化開發(fā)實踐(七):開發(fā)常見問題及解決方案
Android組件化開發(fā)實踐(八):組件生命周期如何實現(xiàn)自動注冊管理
Android組件化開發(fā)實踐(九):自定義Gradle插件
Android組件化開發(fā)實踐(十):通過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)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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

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