免费亚洲欧美精品电影_国内精品偷拍福利视频_美女黄网站色视免费国产_国产不卡福利片在线观看

24小時(shí)咨詢(xún)電話(huà):0571-88023217綏化網(wǎng)站建設(shè)公司 10年專(zhuān)業(yè)網(wǎng)絡(luò)服務(wù)供應(yīng)商

資訊中心

- 直擊網(wǎng)站建設(shè)第一現(xiàn)場(chǎng),掌握全球化的消息 -

當(dāng)前位置 : 首頁(yè) > 資訊中心 > 杭州app定制已步入app工廠時(shí)代

杭州app定制已步入app工廠時(shí)代

分享 2021.04.22 瀏覽次數(shù):3983次

杭州app定制開(kāi)發(fā)越來(lái)越炙手可熱。app工廠是什么?app工廠,是根據(jù)一個(gè)具有完備組件庫(kù)以及這些組件的依賴(lài)關(guān)系,組合成一個(gè)個(gè)app。在多app場(chǎng)景下,由于存在一套代碼,按需生成不同app所需要的代碼,原有的架構(gòu)、代碼依賴(lài)關(guān)系、工程代碼組織方式都需要相應(yīng)的改變。

 

app工廠的目標(biāo)是在特定架構(gòu)和業(yè)務(wù)場(chǎng)景下,基于一套代碼,按需生成目標(biāo)app所需的代碼。一套代碼和按需生成是核心,缺一不可。特別是按需生成,意味著不攜帶任何不需要的代碼,這個(gè)在實(shí)現(xiàn)的過(guò)程中非常具有挑戰(zhàn)性。

 

業(yè)務(wù)的快速試錯(cuò)催生多app

 

移動(dòng)互聯(lián)網(wǎng)不論是在上半場(chǎng),還是在下半場(chǎng),業(yè)務(wù)的創(chuàng)新從來(lái)沒(méi)有停歇過(guò)。從微博到團(tuán)購(gòu),從共享汽車(chē)到共享單車(chē),從長(zhǎng)視頻到短視頻,業(yè)務(wù)和模式的創(chuàng)新不斷。近幾年尤以頭條系的業(yè)務(wù)試錯(cuò)見(jiàn)諸于各報(bào)端,從資訊到直播,再到短視頻,是一波接一波。

 

當(dāng)前不論是大的互聯(lián)網(wǎng)公司,還是創(chuàng)業(yè)性的小公司,要想在新的領(lǐng)域摸索出一番天地,必須不斷試錯(cuò)。移動(dòng)領(lǐng)域的業(yè)務(wù)不斷試錯(cuò),要求能快速產(chǎn)出各業(yè)務(wù)對(duì)應(yīng)的創(chuàng)新app。

 

集團(tuán)業(yè)務(wù)的逐步擴(kuò)大與細(xì)化催生多app

 

互聯(lián)網(wǎng)江湖早已三分天下,巨頭已經(jīng)建立,大的互聯(lián)網(wǎng)平臺(tái)很難形成。但越是大的互聯(lián)網(wǎng)平臺(tái),越擔(dān)心垂直細(xì)分業(yè)務(wù)的進(jìn)攻。為應(yīng)對(duì)進(jìn)攻,集團(tuán)業(yè)務(wù)也需要在一些領(lǐng)域逐步擴(kuò)大和細(xì)化,垂直app應(yīng)運(yùn)而生。

 

垂直app與創(chuàng)新app的差距在于,垂直app是基于現(xiàn)有平臺(tái)業(yè)務(wù)細(xì)分而來(lái),而創(chuàng)新app是平臺(tái)業(yè)務(wù)所沒(méi)有的。

 

另外,為了應(yīng)對(duì)應(yīng)用市場(chǎng)的分發(fā)和對(duì)包大小敏感的用戶(hù),這幾年極速包幾乎成為各大公司的必備app。

 

集團(tuán)業(yè)務(wù)的合并融合催生多app交叉

 

業(yè)務(wù)的收購(gòu)、合并也是大型互聯(lián)網(wǎng)公司常有的事。收購(gòu)合并后的業(yè)務(wù)如何融合,如何既能保持業(yè)務(wù)的獨(dú)立性,又能節(jié)省集團(tuán)研發(fā)資源,還能支持一套交叉業(yè)務(wù)(又稱(chēng)垂直業(yè)務(wù))代碼在各獨(dú)立app運(yùn)行,是一個(gè)重要又復(fù)雜的問(wèn)題。比如今年集團(tuán)內(nèi)安居客房產(chǎn)業(yè)務(wù)和原房產(chǎn)業(yè)務(wù)的融合就是一個(gè)典型的案例。

 

app工廠的實(shí)施目標(biāo)

 

1.app工廠有以下目標(biāo):

 

標(biāo)準(zhǔn)化能力的產(chǎn)出,為app研發(fā)提效增速

 

標(biāo)準(zhǔn)化能力是實(shí)現(xiàn)app工廠的基礎(chǔ),標(biāo)準(zhǔn)化能力與app業(yè)務(wù)代碼無(wú)耦合關(guān)系,比如React Native SDK,網(wǎng)絡(luò)庫(kù)、緩存庫(kù)等。

 

支持創(chuàng)新app、垂直app、極速app的生成和迭代

 

同一套代碼,根據(jù)配置,能按需生成不同app所需的代碼。按需生成是關(guān)鍵和核心,不給app工廠生成的app代碼攜帶任何無(wú)用代碼,增加包大小。

 

支持垂直業(yè)務(wù)在獨(dú)立app上的平移

 

app工廠依附于app框架代碼上,馬甲包、極速包與app工廠(app)是一個(gè)子集與全集的關(guān)系。但類(lèi)似安居客app與app是兩個(gè)獨(dú)立app,有交集(公共底層代碼或某些業(yè)務(wù)代碼),業(yè)務(wù)代碼集合不一樣。

 

針對(duì)獨(dú)立app的公共業(yè)務(wù)代碼,定義為垂直業(yè)務(wù)。app工廠在統(tǒng)一底層服務(wù)的前提下,也要支持垂直業(yè)務(wù)在獨(dú)立app上的平移。即一套業(yè)務(wù)代碼,能在兩個(gè)或多個(gè)獨(dú)立app上運(yùn)行。

 

app工廠架構(gòu)

 

PODS

 

iOS領(lǐng)域,pods特指cocoapods,是其縮寫(xiě)。cocoapods是對(duì)OC或swift Cocoa 工程的依賴(lài)管理。(CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. )

 

中間件

 

中間件在軟件領(lǐng)域的通用解釋是:連接軟件組件和應(yīng)用的程序。在這里中間件體現(xiàn)的是連接和共用。連接的是業(yè)務(wù)層和基礎(chǔ)庫(kù)層,共用體現(xiàn)在業(yè)務(wù)層的公共服務(wù)。

 

中間件按照業(yè)務(wù)強(qiáng)相關(guān)與否分為業(yè)務(wù)中間件和標(biāo)準(zhǔn)中間件。

 

業(yè)務(wù)中間件:與業(yè)務(wù)強(qiáng)相關(guān)的中間件,在某一個(gè)獨(dú)立app中通用。由于對(duì)當(dāng)前app其它功能的過(guò)多依賴(lài),所以不適用于其他獨(dú)立app。

 

標(biāo)準(zhǔn)中間件:與業(yè)務(wù)弱相關(guān)的中間件,不僅在某一個(gè)獨(dú)立app中通用,在其它獨(dú)立app中也通用,與app中的業(yè)務(wù)弱相關(guān)。最常見(jiàn)的是標(biāo)準(zhǔn)版的RNSDK。

 

基礎(chǔ)庫(kù)

 

對(duì)其它pod不產(chǎn)生依賴(lài)的獨(dú)立庫(kù)。比如一些開(kāi)源的三方庫(kù),是常見(jiàn)的基礎(chǔ)庫(kù)。除了第三方開(kāi)源的,集團(tuán)內(nèi)自封裝的sdk,如果對(duì)其它pod不產(chǎn)生依賴(lài),也可以歸入基礎(chǔ)庫(kù)范圍,比如Passport SDK,WPush SDK等;

 

入口工程

 

主要負(fù)責(zé)對(duì)app工廠生成的app所需代碼進(jìn)行配置。

 

入口工程pods:主要負(fù)責(zé)對(duì)app工廠生成的app所需代碼進(jìn)行配置,入口工程中包括的功能有:

 

appInfo:對(duì)app基礎(chǔ)信息的設(shè)置,比如app名稱(chēng),bundle identifier,版本號(hào),證書(shū)等;

 

Podfile:當(dāng)前app對(duì)所需工程代碼的依賴(lài),比如招聘馬甲包會(huì)依賴(lài)招聘業(yè)務(wù)pod以及其他基礎(chǔ)服務(wù)pod和三方庫(kù)pod;

 

Regen.sh: 一個(gè)可執(zhí)行文件(本地RD研發(fā)調(diào)試用),讀取podfile配置,拷貝app所需代碼及配置,然后生成app所需代碼;

 

Reng_jenkins.sh: 一個(gè)可執(zhí)行文件(Jenkins服務(wù)打包用),讀取podfile配置,拷貝app所需代碼及配置,然后生成app所需代碼;

 

工程庫(kù)池

 

工程池是app工廠總的pod代碼集合。

 

工程池是app工廠總的代碼集合,每一個(gè)生成app所需代碼都是從這個(gè)代碼集合中獲取,研發(fā)過(guò)程中代碼更新也會(huì)同步更新到此代碼集合中去。

 

業(yè)務(wù)pods:各獨(dú)立業(yè)務(wù)工程代碼,代碼集合根據(jù)業(yè)務(wù)類(lèi)型來(lái)劃分,比如app首頁(yè)pod、房產(chǎn)pod、招聘pod;

 

中間件pods:app工廠中間服務(wù)代碼,是自己封裝的,區(qū)別于外界的第三方公開(kāi)代碼,故稱(chēng)為中間件代碼。中間件根據(jù)對(duì)app業(yè)務(wù)的是否強(qiáng)依賴(lài)分為:

 

業(yè)務(wù)中間件:與app業(yè)務(wù)強(qiáng)相關(guān),但是是app中業(yè)務(wù)中通用中間服務(wù),其應(yīng)用場(chǎng)景在app的業(yè)務(wù)場(chǎng)景內(nèi)。

 

標(biāo)準(zhǔn)中間件:與app業(yè)務(wù)弱相關(guān),可以作為一個(gè)標(biāo)準(zhǔn)化中間件在其它獨(dú)立app上引入。在標(biāo)準(zhǔn)中間件中可以看到有圖標(biāo)加了兩條豎線(xiàn),這表示此標(biāo)準(zhǔn)中間件某些功能的實(shí)現(xiàn)依賴(lài)接入app的實(shí)現(xiàn),只開(kāi)放了接口協(xié)議。以RN基礎(chǔ)庫(kù)標(biāo)準(zhǔn)中間件為例:中間件包含的內(nèi)容是載體頁(yè)及熱更新的全部公共的與業(yè)務(wù)弱相關(guān)的內(nèi)容,但對(duì)于一些擴(kuò)展的組件(比如埋點(diǎn))需要開(kāi)放協(xié)議讓接入方實(shí)現(xiàn),中間件中不實(shí)現(xiàn)此邏輯。

 

三方庫(kù)pods:外界的開(kāi)源第三方庫(kù)代碼,基本在行業(yè)內(nèi)有統(tǒng)一的引用標(biāo)準(zhǔn);

 

在架構(gòu)設(shè)計(jì)上,各層pods的依賴(lài)準(zhǔn)則為:

 

上層可以依賴(lài)下層,但下層不可以依賴(lài)上層。比如上層中的業(yè)務(wù)pod中的首頁(yè)(MainPage)可以依賴(lài)業(yè)務(wù)中間件中的生命周期(WBLifeCircle),但反之不能依賴(lài)。

 

可以隔層依賴(lài)。比如業(yè)務(wù)pod可以依賴(lài)基礎(chǔ)庫(kù)pod;

 

業(yè)務(wù)pod間不能產(chǎn)生依賴(lài)。比如房產(chǎn)pod不能依賴(lài)招聘pod。

 

中間件pod和三方庫(kù)pod可以單向依賴(lài)。比如RN所在pod可以對(duì)登錄服務(wù)所在pod產(chǎn)生單向依賴(lài)。

 

制定上述依賴(lài)準(zhǔn)則,是為了在生產(chǎn)app時(shí)或者進(jìn)行垂直業(yè)務(wù)平移時(shí)可以按需配置所需pod。

 

如何借助app工廠架構(gòu)達(dá)成設(shè)計(jì)目標(biāo)

 

1.如何提供標(biāo)準(zhǔn)化的能力

 

所謂標(biāo)準(zhǔn)化能力,可以理解為獨(dú)立無(wú)依賴(lài)的Framework或SDK,對(duì)應(yīng)上述架構(gòu)圖中的標(biāo)準(zhǔn)中間件。比如RN基礎(chǔ)庫(kù),封裝了載體頁(yè)、熱更新等一整套公共服務(wù),app外的獨(dú)立app可以無(wú)縫接入。

 

另外,還有一些集團(tuán)內(nèi)其他中臺(tái)部門(mén)提供的標(biāo)準(zhǔn)化SDK,比如PassportSDK、IMSDK、PaySDK等。

 

2.如何支持創(chuàng)新app、極速app的生成

 

在理想工程架構(gòu)狀態(tài)下(即達(dá)到架構(gòu)各層依賴(lài)準(zhǔn)則),可以按需配置app所需功能,來(lái)生成馬甲包或者極速包。當(dāng)然為了應(yīng)對(duì)蘋(píng)果審核(app之間必須保持差異性),還得針對(duì)馬甲包或者極速包來(lái)做一些個(gè)性化的處理。這種個(gè)性化處理在先前的馬賽克項(xiàng)目有完成,具體詳見(jiàn)馬賽克項(xiàng)目。

 

3.如何支持垂直業(yè)務(wù)的平移

 

垂直業(yè)務(wù):同一業(yè)務(wù)在多個(gè)app上呈現(xiàn)的業(yè)務(wù)稱(chēng)之為垂直業(yè)務(wù)。

 

垂直業(yè)務(wù)平移:并不是真的去移動(dòng),是指垂直業(yè)務(wù)及依賴(lài)的底層代碼是一套公共代碼,能夠運(yùn)行在不同app上。

 

上圖所示的是租房和二手房這兩個(gè)垂直業(yè)務(wù)需要達(dá)到一套代碼,同時(shí)運(yùn)行在app和安居客app上。這就要求:

 

app和安居客app共用垂直業(yè)務(wù)所依賴(lài)的底層代碼(中間件代碼+基礎(chǔ)庫(kù)代碼);

 

垂直業(yè)務(wù)代碼及所依賴(lài)的底層代碼對(duì)app或安居客app中的獨(dú)有代碼沒(méi)有任何耦合,這樣就不會(huì)攜帶一些無(wú)關(guān)的不需要的代碼,有利于控制包大小;

 

垂直業(yè)務(wù)代碼及所依賴(lài)的底層代碼必須滿(mǎn)足app工廠架構(gòu)中的分層原則和依賴(lài)原則,這樣架構(gòu)擴(kuò)展性會(huì)比較靈活

 

如何對(duì)存量代碼實(shí)施app工廠

 

基于前文app工廠技術(shù)架構(gòu)及各層pod的依賴(lài)準(zhǔn)則,各層pod的依賴(lài)關(guān)系理想示意圖如下圖所示(以招聘業(yè)務(wù)pod依賴(lài)為例):

 

從業(yè)務(wù)層到中間件層再到基礎(chǔ)庫(kù)層,從上到下單向依賴(lài),沒(méi)有反向依賴(lài)和循環(huán)依賴(lài)

 

業(yè)務(wù)層之間沒(méi)有依賴(lài)

 

中間件層和基礎(chǔ)庫(kù)層可以允許有單向依賴(lài)

 

有了上述理想的依賴(lài)關(guān)系后,在入口工程進(jìn)行生成app所需代碼進(jìn)行配置時(shí),就能按需配置,不會(huì)因?yàn)?/font>pod之間的反向依賴(lài)、循環(huán)依賴(lài)、整層依賴(lài)攜帶很多無(wú)用代碼,增加包大小。

 

1. 業(yè)務(wù)層pod解耦

 

上圖所示的招聘業(yè)務(wù)的依賴(lài)關(guān)系。黑色箭頭表示的是pod的單向依賴(lài),紅色的雙向箭頭表示的pod的雙向依賴(lài)。

 

備注:服務(wù)層對(duì)應(yīng)中間件層,三方庫(kù)層對(duì)應(yīng)基礎(chǔ)庫(kù)層。

 

針對(duì)業(yè)務(wù)pod解耦主要處理下層pod對(duì)業(yè)務(wù)pod的依賴(lài)以及業(yè)務(wù)pod之間的依賴(lài),如下圖所示:

 

2. 中間件層pod解耦

 

如上圖中實(shí)線(xiàn)所示的是招聘pod所依賴(lài)的中間件層pod之間的耦合關(guān)系。

 

服務(wù)層pod解耦要解決以下兩種耦合關(guān)系:

 

pod之間的雙向耦合

 

pod之間的不必要單向依賴(lài)

 

服務(wù)層pod的解耦至關(guān)重要,直接涉及到對(duì)工具庫(kù)pod的依賴(lài)處理。如不解除服務(wù)層pod的循環(huán)依賴(lài)關(guān)系,則會(huì)導(dǎo)致對(duì)工具庫(kù)pod的整層依賴(lài),沒(méi)法按需配置所依賴(lài)的pod,造成包大小無(wú)法控制。

 

3. 基礎(chǔ)庫(kù)層pod解耦

 

由于基礎(chǔ)庫(kù)層pod是最底層pod,沒(méi)有其他的依賴(lài)pod,所以也是這三層pod解耦工作量最少的。

 

目前app內(nèi)的基礎(chǔ)庫(kù)層pod全都是放在一個(gè)pod中,這層解耦所要作的是按照功能對(duì)這個(gè)pod進(jìn)行拆分,拆成一個(gè)個(gè)上層pod可依賴(lài)的單元。

 

如何保證app工廠質(zhì)量

 

app工廠的質(zhì)量在版本迭代過(guò)程中的質(zhì)量非常重要。如果在后續(xù)版本迭代過(guò)程中代碼沒(méi)有嚴(yán)格遵循app工廠的pod依賴(lài)準(zhǔn)則,等到發(fā)現(xiàn)問(wèn)題才去解決,會(huì)帶來(lái)很大的額外工作量。

 

1. Pod依賴(lài)關(guān)系檢測(cè)

 

這個(gè)是所有質(zhì)量檢測(cè)的基礎(chǔ)。在本文看到的一些pod的依賴(lài)關(guān)系都是我們開(kāi)發(fā)的pod依賴(lài)自動(dòng)分析工具得出的。如果沒(méi)有這個(gè)工具,在一些中大型的app中,靠人工方式去梳理這種依賴(lài)關(guān)系,將是一個(gè)極大的工作量。在這里大概說(shuō)一下思路,有更好的方式歡迎交流:

 

掃描本地工程目錄下所有pod代碼文件夾,及里面的類(lèi)文件,建立類(lèi)文件與pod工程的映射關(guān)系 filePodDict。

 

掃描每一個(gè)pod下面類(lèi)文件中的文件依賴(lài)部分(import部分),根據(jù)頭文件依賴(lài)及上面的filePodDict,建立pod的直接依賴(lài)關(guān)系podDepenDict。

 

串聯(lián)所有pod的直接依賴(lài)關(guān)系,形成pod依賴(lài)最終關(guān)系podFinalDepenGraph,并輸出。最終Pod的依賴(lài)關(guān)系對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是有向圖。

 

如上圖所示,是基于招聘pod和其依賴(lài)的pod構(gòu)建的有向圖的示意圖(為便于識(shí)別,將兩個(gè)pod直接相互依賴(lài)的一條線(xiàn)畫(huà)成了虛線(xiàn))?;谶@個(gè)數(shù)據(jù)結(jié)構(gòu),能實(shí)現(xiàn)前文所說(shuō)的app工廠依賴(lài)準(zhǔn)則的檢測(cè)。

 

2. 下層Pod對(duì)上層pod反向依賴(lài)檢測(cè)

 

下層pod對(duì)上層pod反向依賴(lài),是app工廠依賴(lài)準(zhǔn)則首要禁止內(nèi)容。比如如果中間件層的WubaRN的這個(gè)pod依賴(lài)了上層 首頁(yè)pod,會(huì)導(dǎo)致在業(yè)務(wù)平移過(guò)程中因?yàn)橐蕾?lài)WubaRN,而需攜帶不需要的首頁(yè)業(yè)務(wù)代碼。

 

基于上述的有向圖,反向檢測(cè)在技術(shù)上很容易實(shí)現(xiàn):

 

內(nèi)置一份pod與層級(jí)的映射關(guān)系

 

遍歷pod依賴(lài)關(guān)系有向圖,檢測(cè)當(dāng)前pod所依賴(lài)的pod層級(jí)是否小于自己的層級(jí),如果小于,則是反向依賴(lài),并標(biāo)記

 

將標(biāo)記的反向依賴(lài)關(guān)系輸出

 

3. Pod循環(huán)依賴(lài)檢測(cè)

 

在app工廠中,除了業(yè)務(wù)層代碼有非常明確的原因不能有依賴(lài)和環(huán)外,其它層的pod之間即使存在環(huán),也有辦法達(dá)到app工廠不攜帶多余代碼的目標(biāo)。但撇開(kāi)app工廠不說(shuō),環(huán)的存在本質(zhì)上是大多數(shù)情況兩個(gè)pod之間存在公共代碼沒(méi)有下沉。所以為了使app工廠的依賴(lài)準(zhǔn)則更簡(jiǎn)單和更易執(zhí)行,就統(tǒng)一規(guī)定不能產(chǎn)生循環(huán)依賴(lài)。

 

檢測(cè)有向圖是否存在環(huán),是一個(gè)基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)問(wèn)題,在此不贅述。

 

4. 標(biāo)準(zhǔn)中間件污染檢測(cè)

 

標(biāo)準(zhǔn)中間件是app工廠的核心,如果標(biāo)準(zhǔn)中間件在后續(xù)的業(yè)務(wù)迭代過(guò)程中被污染,即引入了不符合準(zhǔn)則的依賴(lài)關(guān)系,將帶來(lái)額外的維護(hù)成本和解耦成本。所以如果能在單分支研發(fā)的時(shí)候以及集成分支上進(jìn)行檢測(cè),將被污染的概率降到最低。

 

在app工廠中,標(biāo)準(zhǔn)中間件只允許依賴(lài)基礎(chǔ)庫(kù)層的pod。所以檢測(cè)策略也很簡(jiǎn)單:

 

遍歷所有標(biāo)準(zhǔn)中間件

 

遍歷每一個(gè)標(biāo)準(zhǔn)中間件所依賴(lài)的pod,并判斷所依賴(lài)的pod是否屬于基礎(chǔ)庫(kù)層。如果不屬于,則標(biāo)記這個(gè)被污染的依賴(lài)關(guān)系。

 

輸出所有被污染的標(biāo)準(zhǔn)中間件及不合規(guī)的依賴(lài)關(guān)系。

 

app工廠的實(shí)踐經(jīng)驗(yàn)

 

app工廠在app上有著廣泛的應(yīng)用。目前已在房產(chǎn)垂直業(yè)務(wù)平移和招聘垂直app生成上進(jìn)行了應(yīng)用,并上線(xiàn)。

 

房產(chǎn)垂直業(yè)務(wù)平移實(shí)踐(木星計(jì)劃項(xiàng)目)

 

從去年開(kāi)始,同城房產(chǎn)業(yè)務(wù)和安居客房產(chǎn)業(yè)務(wù)進(jìn)行了調(diào)整,租房和二手房業(yè)務(wù)在兩個(gè)獨(dú)立app上進(jìn)行了重新拆分和整合。業(yè)務(wù)調(diào)整后原來(lái)的同城租房和安居客二手房業(yè)務(wù)變成了垂直業(yè)務(wù),即在同城app和安居客app兩個(gè)獨(dú)立app上同時(shí)運(yùn)行。業(yè)務(wù)的調(diào)整給技術(shù)架構(gòu)帶來(lái)了很大的挑戰(zhàn):

 

如何將同城租房、安居客二手房從原有app中拆分出來(lái)?

 

如何在拆分過(guò)程中處理依賴(lài)代碼,最大限度降低攜帶無(wú)關(guān)代碼?

 

可以想象一下,如果不基于app工廠要達(dá)成上述目標(biāo),會(huì)出現(xiàn)什么情況?

 

要么攜帶很多對(duì)方app所不需要的,或者重復(fù)的代碼,造成包大小失控。

 

要么針對(duì)具體業(yè)務(wù)寫(xiě)非常多的協(xié)議(Protocol),各獨(dú)立app針對(duì)協(xié)議做各自實(shí)現(xiàn)。但這個(gè)協(xié)議會(huì)非常多,尤其針對(duì)存量代碼的改造成本非常高。

 

于是,無(wú)線(xiàn)技術(shù)部與房產(chǎn)技術(shù)部(安居客房產(chǎn)技術(shù)部、房產(chǎn)技術(shù)部)一拍即合,就將app工廠應(yīng)用到房產(chǎn)垂直業(yè)務(wù)平移中。

 

1.項(xiàng)目里程碑

 

這里重點(diǎn)介紹一下項(xiàng)目里程碑,以說(shuō)明在多app垂直業(yè)務(wù)平移過(guò)程中,接入app工廠的思路。

 

從上述表格及依賴(lài)關(guān)系可以看出項(xiàng)目主要分為三個(gè)階段:

 

抽離出垂直業(yè)務(wù)所依賴(lài)的公共庫(kù)

 

各app分別接入抽出的公共庫(kù)

 

垂直業(yè)務(wù)做一些適配,能同時(shí)運(yùn)行在雙app上

 

第一個(gè)階段公共庫(kù)的抽離大概用了1個(gè)半月;第二個(gè)階段各獨(dú)立app接入公共庫(kù)用了1-2個(gè)版本(平均3個(gè)星期一個(gè)版本),主要看測(cè)試資源的情況;第三個(gè)階段垂直業(yè)務(wù)平移用了2-3個(gè)版本。

 

2.項(xiàng)目實(shí)施概述

 

2.1 公共庫(kù)的抽離

 

這里的公共庫(kù)是指垂直業(yè)務(wù)所依賴(lài)的中間件層代碼庫(kù)和基礎(chǔ)庫(kù)層代碼庫(kù)。這一步非常重要,如果沒(méi)有處理到位,后續(xù)業(yè)務(wù)在接入的過(guò)程中會(huì)不斷返工。

 

具體垂直業(yè)務(wù)對(duì)中間件代碼和基礎(chǔ)庫(kù)代碼的耦合分析上文已詳細(xì)介紹了,在此不重復(fù)描述。這里要討論一個(gè)實(shí)踐中很重要的問(wèn)題:從兩個(gè)獨(dú)立app中抽離公共庫(kù),如何統(tǒng)一的問(wèn)題?

 

這個(gè)問(wèn)題很復(fù)雜,以網(wǎng)絡(luò)中間件為例,各獨(dú)立app都有自己的封裝,而且封裝的API差異很大,很難通過(guò)調(diào)整API協(xié)議去抹平差異。這種情況下最簡(jiǎn)單高效的方法是以一方app為基準(zhǔn),另一方app提兼容需求并放棄原有自己的代碼,抽離出來(lái)后共同維護(hù)。

 

考慮到app的體量和對(duì)業(yè)務(wù)的影響,當(dāng)時(shí)商量的是以app為基準(zhǔn),安居客根據(jù)二手房業(yè)務(wù)代碼的調(diào)用需求,提兼容需求。app抽離出來(lái)后,安居客重新接入。

 

最終剝離出的公共庫(kù)(標(biāo)準(zhǔn)中間件)如下表所示:

 

關(guān)于公共庫(kù)的剝離有兩個(gè)關(guān)鍵點(diǎn)要注意:

 

以要平移的業(yè)務(wù)所依賴(lài)的公共庫(kù)為核心,不要貪多。以業(yè)務(wù)驅(qū)動(dòng)來(lái)剝離公共庫(kù),隨著業(yè)務(wù)的逐步接入和不斷支持,公共庫(kù)的數(shù)量和能力也逐漸上去了。

 

技術(shù)上剝離公共庫(kù)不難,難的是最大限度降低對(duì)其它業(yè)務(wù)的影響,以及保證關(guān)聯(lián)業(yè)務(wù)上線(xiàn)的穩(wěn)定性。

 

如前文架構(gòu)中介紹的,公共庫(kù)有標(biāo)準(zhǔn)中間價(jià)和業(yè)務(wù)中間件。在這里沒(méi)有具體介紹業(yè)務(wù)中間件的情況。因?yàn)闃I(yè)務(wù)中間件的依賴(lài)關(guān)系比較復(fù)雜。在具體拆分時(shí)一定要詳細(xì)分析拆分成本。

 

2.2 各獨(dú)立app接入公共庫(kù)

 

下表列舉了實(shí)施過(guò)程中的其中有代表性的四個(gè)中間件在各獨(dú)立app上的接入方案。

 

由于是基于app抽離出的中間件,所以app租房代碼在平移的過(guò)程中,業(yè)務(wù)代碼基本不用改動(dòng)。但安居客的業(yè)務(wù)代碼需要做相應(yīng)的改動(dòng),這個(gè)成本是節(jié)省不了的。從當(dāng)前上線(xiàn)的安居客二手房功能代碼穩(wěn)定性來(lái)看,這個(gè)部分改動(dòng)很成功。

 

2.3 垂直業(yè)務(wù)平移

 

上述垂直業(yè)務(wù)依賴(lài)的公共庫(kù)在各個(gè)獨(dú)立app接入后,并不意味著垂直業(yè)務(wù)就可以平移了。app工廠的一個(gè)核心目標(biāo)是不攜帶無(wú)關(guān)代碼。垂直業(yè)務(wù)除了對(duì)公共庫(kù)有依賴(lài),還對(duì)自身app中的其它模塊代碼有依賴(lài)。只有最大限度對(duì)這些非公共庫(kù)代碼摘除依賴(lài),即拆分成業(yè)務(wù)中間件,才能真正滿(mǎn)足app工廠目標(biāo)。

 

這里不具體敘述如何去解藕業(yè)務(wù)中間件,主要介紹一下操作過(guò)程中的幾個(gè)準(zhǔn)則,只要把握好這個(gè)準(zhǔn)則,基本沒(méi)什么大的問(wèn)題:

 

分析依賴(lài)代碼能否做成業(yè)務(wù)中間件。業(yè)務(wù)中間件一定要滿(mǎn)足前文敘述的單向依賴(lài)原則,否則在代碼攜帶過(guò)程中無(wú)法做分析。

 

如果依賴(lài)代碼只是少數(shù)幾個(gè)文件,不足以拆分出業(yè)務(wù)中間件。在對(duì)包大小沒(méi)有影響的前提下可以允許一些重復(fù)代碼。

 

拆分業(yè)務(wù)中間件的過(guò)程中一定要保證對(duì)其它業(yè)務(wù)線(xiàn)不要產(chǎn)生影響。比如房產(chǎn)和招聘都依賴(lài)一塊業(yè)務(wù)中間件代碼,那在滿(mǎn)足房產(chǎn)業(yè)務(wù)平移的過(guò)程中,要想辦法不要對(duì)招聘代碼產(chǎn)生影響。

 

對(duì)常見(jiàn)的解藕手段一定要注意選型,比如什么場(chǎng)景該用通知,什么場(chǎng)景該用runtime,什么場(chǎng)景該用protocol。

 

3.項(xiàng)目成果

 

這個(gè)項(xiàng)目是三方一起共同完成的,在這里僅說(shuō)無(wú)線(xiàn)iOS側(cè)的一些成果:

 

上述成果只涵蓋了app工廠標(biāo)準(zhǔn)化成果,這些標(biāo)準(zhǔn)化成果不僅僅支持房產(chǎn)垂直業(yè)務(wù)平移,還適用于對(duì)其它業(yè)務(wù)的支持,比如同城招聘app(已完成)、同城租房app(即將進(jìn)行)的生成和部落垂直業(yè)務(wù)平移(正在進(jìn)行)。關(guān)于業(yè)務(wù)中間件的解耦與具體業(yè)務(wù)有關(guān)聯(lián),在此沒(méi)有詳細(xì)梳理。

 

app工廠在木星計(jì)劃中對(duì)包大小的收益及接入后的穩(wěn)定性如下表所示:

 

從上表可以看出,包大小上不論是對(duì)app還是安居客app,都有非常大的收益。崩潰率在接入前后沒(méi)有顯著性變化,代碼上線(xiàn)穩(wěn)定表現(xiàn)良好。特別是針對(duì)崩潰率和功能穩(wěn)定性,涉及這么大范圍的變動(dòng),能做到?jīng)]有線(xiàn)上事故確實(shí)不容易。

 

最新網(wǎng)站案例

洞悉市場(chǎng)趨勢(shì)演變讓傳播回歸社會(huì)

    免費(fèi)獲取網(wǎng)站建設(shè)與網(wǎng)絡(luò)推廣方案報(bào)價(jià)

    • 關(guān)于我們

      杭州帷拓科技有限公司,是一家新型的全案網(wǎng)絡(luò)開(kāi)發(fā)公司,作為以互聯(lián)網(wǎng)高端網(wǎng)站建設(shè)、APP開(kāi)發(fā)、小程序開(kāi)發(fā)為核心的專(zhuān)業(yè)網(wǎng)絡(luò)技術(shù)服務(wù)供應(yīng)商,帷拓科技致力于全面分析市場(chǎng)環(huán)境、衡量與預(yù)測(cè)市場(chǎng)需求、整合區(qū)別于行業(yè)競(jìng)爭(zhēng)對(duì)手的絕對(duì)優(yōu)勢(shì),結(jié)合品牌理念深度挖掘項(xiàng)目?jī)?yōu)勢(shì)和產(chǎn)品價(jià)值,提升客戶(hù)品牌認(rèn)知、認(rèn)可度。

    • 我們的客戶(hù)

      帷拓科技?xì)v經(jīng)十年沉淀,與國(guó)內(nèi)外上千家客戶(hù)達(dá)成合作關(guān)系,其中穩(wěn)定合作的公司有:浙江華為、浙江移動(dòng)、浙江5G產(chǎn)業(yè)聯(lián)盟、浙江省社科院、綠城足球俱樂(lè)部、娃哈哈雙語(yǔ)學(xué)校、健康中國(guó)杭州峰會(huì)、科雷機(jī)電等,帷拓科技始終堅(jiān)持“帷有專(zhuān)業(yè),才能拓展無(wú)限”的服務(wù)理念,堅(jiān)持“認(rèn)真堅(jiān)持細(xì)節(jié)”的優(yōu)質(zhì)服務(wù)理念,不斷完善自身,成就企業(yè),最終實(shí)現(xiàn)共贏。

    • 我們的業(yè)務(wù)

      帷拓科技主營(yíng)業(yè)務(wù)范圍包含互聯(lián)網(wǎng)高端網(wǎng)站建設(shè)、APP開(kāi)發(fā)、小程序開(kāi)發(fā)、商城網(wǎng)站建設(shè)、公眾號(hào)運(yùn)營(yíng)以及數(shù)字營(yíng)銷(xiāo)等,涵蓋了服務(wù)、房產(chǎn)、數(shù)碼、服裝、物流貿(mào)易等行業(yè),根據(jù)品牌現(xiàn)狀,為每個(gè)客戶(hù)量身定制項(xiàng)目整體服務(wù)方案,以敏銳的市場(chǎng)洞察力、創(chuàng)新的市場(chǎng)策劃能力,全面把握市場(chǎng)變化,為客戶(hù)實(shí)現(xiàn)從企業(yè)到消費(fèi)者的價(jià)值轉(zhuǎn)換。

    Designerpart Designagentur
    Designerpart Designagentur
    Designerpart Designagentur
    Designerpart Designagentur
    Designerpart Designagentur
    Designerpart Designagentur