為什么要組件化?
從個人經(jīng)歷來說的話挡篓,隨著所接觸的APP的體積變得越來越大,業(yè)務(wù)的也變得越來越復(fù)雜篡殷,業(yè)務(wù)模塊的數(shù)量越來越多杰妓,而且每個模塊的代碼也變的越來越多藻治,單一工程下的APP架構(gòu)勢必會影響開發(fā)效率,增加項目的維護成本巷挥,每個工程師都要熟悉如此之多的代碼桩卵,將很難進行多人協(xié)作開發(fā),而且Android項目在編譯代碼的時候電腦會非潮侗觯卡雏节,又因為單一工程下代碼耦合嚴(yán)重,每修改一處代碼后都要重新編譯打包測試高职,導(dǎo)致非常耗時钩乍,代碼想要做單元測試也很難。
目前大部分app的單一項目結(jié)構(gòu)原型初厚。大致如下圖所示:
我們再來看下他們的直接的依賴關(guān)系圖:
上圖單一工程模型下的業(yè)務(wù)關(guān)系件蚕,總的來說就是:你中有我孙技,我中有你,相互依賴排作,無法分離牵啦。
然而隨著產(chǎn)品的迭代,業(yè)務(wù)越來越復(fù)雜妄痪,隨之帶來的是項目結(jié)構(gòu)復(fù)雜度的極度增加哈雏,此時我們會面臨如下幾個問題:
1、實際業(yè)務(wù)變化非成郎快裳瘪,但是單一工程的業(yè)務(wù)模塊耦合度太高,牽一發(fā)而動全身罪针;
2彭羹、對工程所做的任何修改都必須要編譯整個工程;
3泪酱、功能測試和系統(tǒng)測試每次都要進行派殷;
4、團隊協(xié)同開發(fā)存在較多的沖突.不得不花費更多的時間去溝通和協(xié)調(diào)墓阀,并且在開發(fā)過程中毡惜,任何一位成員沒辦法專注于自己的功能點,影響開發(fā)效率斯撮;
5经伙、不能靈活的對業(yè)務(wù)模塊進行配置和組裝;
為了更好的滿足各個業(yè)務(wù)的迭代而彼此不受影響勿锅,更好的解決上面這種讓人頭疼的依賴關(guān)系帕膜,開始著手app組件化。
組件化:
APP組件化架構(gòu)整改的方向就是告別結(jié)構(gòu)臃腫的時代粱甫。業(yè)務(wù)組件和功能組件泳叠,類庫工程之間遵循向下依賴關(guān)系,相互獨立茶宵,app組件化項目結(jié)構(gòu)原型危纫。大致如下圖所示:
一個項目工程拆分成若干個模塊工程,由app殼工程提供統(tǒng)一的入口乌庶,每個業(yè)務(wù)獨立的模塊module共享項目的依賴庫种蝶。由殼工程集成需要引入的業(yè)務(wù)模塊,至于各個獨立的業(yè)務(wù)模塊之間的調(diào)用依賴關(guān)系瞒大,我們借助一個中間層充當(dāng)路由功能螃征,這個路由我們放在各個業(yè)務(wù)模塊共同引用的依賴庫那一層。由路由統(tǒng)一調(diào)度他們之間的依賴關(guān)系透敌,路由調(diào)度解決平級依賴問題示意圖:
APP 業(yè)務(wù)組件化架構(gòu)優(yōu)點:
(1)加快迭代速度盯滚,各個業(yè)務(wù)模塊組件更加獨立踢械,不再因為業(yè)務(wù)耦合情況,在發(fā)版時候魄藕,由于互相等待而遲遲不能發(fā)布版本内列。
(2)穩(wěn)定的公共模塊采用依賴庫方式,提供給各個業(yè)務(wù)線使用背率,減少重復(fù)開發(fā)和維護工作量话瞧。
(3)迭代頻繁的業(yè)務(wù)模塊采用組件方式,各業(yè)務(wù)線研發(fā)可以互不干擾寝姿、提升協(xié)作效率交排,并控制產(chǎn)品質(zhì)量。
(4)為新業(yè)務(wù)隨時集成提供了基礎(chǔ)饵筑,所有業(yè)務(wù)可上可下埃篓,靈活多變。
(5)降低團隊成員熟悉項目的成本翻翩,降低項目的維護難度都许。
(6)加快編譯速度稻薇,提高開發(fā)效率