Android架構分層演進實踐

起源

我們知道,軟件開發(fā)項目是一個綜合平衡的過程盖淡,要平衡時間、成本褪迟、范圍、質量四個要素味赃,在單個項目中掀抹,這四要素是非此即彼的:時間緊迫就要壓縮需求范圍心俗,添加需求就要追加成本傲武,確保質量就不能過于壓縮工期,相互之間無法調和城榛。

但如果跳出單個項目揪利,在日常積累上面下功夫狠持,我們卻有可能找到一種同時有利于項目四要素的途徑,就是建立和使用通用的開發(fā)架構甜刻。

大部分公司不會僅研發(fā)一個App,而是會研發(fā)一系列App尿招,形成家族化矾柜、品牌化就谜,或互相依賴丧荐,或入場試錯缆瓣,這些App功能業(yè)務可能不盡相同,但一般都需要網絡模塊/日志模塊/圖像加載模塊虹统,需要一些常見的簡單函數(shù)弓坞,為建立品牌形象,還需要統(tǒng)一的主題資源如色調/圖標/提示語等车荔。

這些低水平的重復開發(fā)渡冻,是與業(yè)務沒有直接關系卻必須支付的“死重”,是可以通過模塊復用來提升效率的忧便,這也是我們做Android架構分層的初衷族吻,我們把開發(fā)中常用的模塊抽象出來,分組分層珠增,形成結構清晰超歌,組裝靈活的通用組件庫,支撐起了多個App的快速實現(xiàn)與迭代蒂教。


組件與App的分層結構

價值

在實際開發(fā)過程中巍举,我們發(fā)現(xiàn)通用組件庫對于開發(fā)的效率和質量,都有了顯著的提升:
1.節(jié)省時間凝垛,因為組件功能可以復用禀综,能降低團隊成員熟悉項目的成本,為新業(yè)務開發(fā)提供基礎苔严,加快開發(fā)迭代速度定枷,有利于更快地發(fā)布版本。
2.降低成本届氢,把穩(wěn)定的公共模塊抽象為通用組件庫欠窒,提供給各個業(yè)務線協(xié)作使用,能在全公司范圍內減少重復開發(fā)和升級維護的工作量
3.提升質量,頻繁使用的功能/業(yè)務模塊采用組件復用方式岖妄,更有利于暴露缺陷型将,一處修改,多處受益荐虐,提高產品質量七兜。

具體設計

對于App來說,選用組件應該按需取用福扬,僅選用自己需要的那些組件腕铸,這就需要把組件分離為多個,形成一個結構化的組件庫铛碑,我們最終形成的組件庫大概是這樣的:


組件庫結構

在上圖的結構中狠裹,通用組件是與業(yè)務無關的基礎功能,共享組件是與業(yè)務有緊密聯(lián)系的汽烦,共享組件可能需要引用通用組件涛菠。

在具體實現(xiàn)中,我們處理過這樣幾個問題:

  1. 引用形式
    在引用形式上撇吞,我們有aar和module代碼兩種方式俗冻,其中aar適合函數(shù)已經固定,不允許擴展修改的情況牍颈;module適合類型已經分開言疗,但是函數(shù)并未固定,可以增加新函數(shù)的情況颂砸。
  2. 依賴倒置
    在引用第三方庫時,我們禁止直接引用死姚,App可以直接引用第三方庫人乓,但是組件必須使用自己的接口,這樣在第三方庫升級或者更換時都毒,不會影響頂層的app色罚。
    例如網絡層必須使用網絡組件自己定義的callback接口,實際上就是都要依賴于抽象账劲,不能依賴具體戳护。
  3. 接口隔離
    組件庫大量使用接口為App服務,這要求接口保持互相隔離瀑焦,盡量把功能拆分到多個接口里腌且,不能出現(xiàn)大而全的接口。
  4. 單一職責
    每個組件僅負責一類功能榛瓮,互相之間可以有調用铺董,但不能出現(xiàn)一個大而全的組件。
  5. 開放封閉
    組件中的函數(shù)是嚴禁修改的禀晓,可以增加新函數(shù)精续,但嚴禁修改已有函數(shù)坝锰,除非是為了消除缺陷。
  6. 異常拋出
    底層組件有時候必須做異常捕獲重付,無論是Exception還是Error都需要拋出顷级,也就是說所有的Throwable都需要向上層拋出,避免應用層莫名其妙的發(fā)現(xiàn)流程被打斷确垫,無法查知底層組件出現(xiàn)的異常弓颈。
  7. 質量控制
    底層組件的場景比較抽象也比較固定,實際上容易做單元測試和自動化測試森爽,為組件開發(fā)專門的自動測試模塊恨豁,甚至出一個自動測試demo,都是性價比很高的投入爬迟。
  8. 代碼追溯
    對于module形式共享的組件橘蜜,實際上允許開發(fā)團隊進行擴展和修改,但是所有的變更都隱藏著缺陷付呕,所以在組件庫的代碼提交中计福,必須進行代碼審查,并注釋代碼修改的時間徽职、事由象颖、操作人等,以便在出現(xiàn)缺陷時進行追溯 姆钉。
  9. jar包沖突
    長期維護下來说订,必然可能引用多個版本的第三方庫,這就會產生jar包沖突的問題潮瓶,所以有必要在底層建立一個整合第三方庫的module陶冷,各App共同引用這個庫module。
  10. 版本分支
    有些情況下毯辅,某些第三方庫發(fā)生了大版本的迭代更新埂伦,更新前后的功能變化極大,導致app無法完美兼容思恐,這就需要建立版本分支沾谜,使用特定版本的組件庫,維持app的研發(fā)需求胀莹,直至app重構基跑,或app消亡。
  11. 路由解耦
    有些業(yè)務組件是有Activity的描焰,這些組件之間跳轉時涩僻,為了解耦合,應該避免通過包名和類名去跳轉,可以參考Android的Intent思想逆日,允許通過action和category一起過濾嵌巷,找到跳轉目標,實際開發(fā)中可以做一個Router室抽,例如阿里開源的ARouter

最終搪哪,App選用組件庫的結構,大概是這樣的:


圖片 1.png

參考

App 組件化/模塊化之路——構建開發(fā)架構思路
滴滴國際化項目 Android 端演進

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末坪圾,一起剝皮案震驚了整個濱河市晓折,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兽泄,老刑警劉巖漓概,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異病梢,居然都是意外死亡胃珍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門蜓陌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來觅彰,“玉大人,你說我怎么就攤上這事钮热√钐В” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵隧期,是天一觀的道長飒责。 經常有香客問我,道長仆潮,這世上最難降的妖魔是什么宏蛉? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮鸵闪,結果婚禮上,老公的妹妹穿的比我還像新娘暑诸。我一直安慰自己蚌讼,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布个榕。 她就那樣靜靜地躺著篡石,像睡著了一般。 火紅的嫁衣襯著肌膚如雪西采。 梳的紋絲不亂的頭發(fā)上凰萨,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音,去河邊找鬼胖眷。 笑死武通,一個胖子當著我的面吹牛,可吹牛的內容都是我干的珊搀。 我是一名探鬼主播冶忱,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼境析!你這毒婦竟也來了囚枪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤劳淆,失蹤者是張志新(化名)和其女友劉穎链沼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沛鸵,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡括勺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谒臼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朝刊。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蜈缤,靈堂內的尸體忽然破棺而出拾氓,到底是詐尸還是另有隱情,我是刑警寧澤底哥,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布咙鞍,位于F島的核電站,受9級特大地震影響趾徽,放射性物質發(fā)生泄漏续滋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一孵奶、第九天 我趴在偏房一處隱蔽的房頂上張望疲酌。 院中可真熱鬧,春花似錦了袁、人聲如沸朗恳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粥诫。三九已至,卻和暖如春崭庸,著一層夾襖步出監(jiān)牢的瞬間怀浆,已是汗流浹背谊囚。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留执赡,地道東北人镰踏。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像搀玖,于是被迫代替她去往敵國和親余境。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容