以往的單App研發架構,由于每次打包編譯、版本發布都是一(yī)個全量的代碼集合,所以不會也不需要考慮每一(yī)個組件之間的依賴和耦合關系。在多App場景下(xià),由于存在一(yī)套代碼,按需生(shēng)成不同App所需要的代碼,原有的架構、代碼依賴關系、工(gōng)程代碼組織方式都需要相應的改變。
App工(gōng)廠的目标是在特定架構和業務場景下(xià),基于一(yī)套代碼,按需生(shēng)成目标App所需的代碼。一(yī)套代碼和按需生(shēng)成是核心,缺一(yī)不可。特别是按需生(shēng)成,意味着不攜帶任何不需要的代碼,這個在實現的過程中(zhōng)非常具有挑戰性。本文從iOS視角,分(fēn)享58App在App工(gōng)廠方面的理論和實踐的探索。
App工(gōng)廠産生(shēng)背景
業務的快速試錯催生(shēng)多App
移動互聯網不論是在上半場,還是在下(xià)半場,業務的創新從來沒有停歇過。從微博到團購,從共享汽車(chē)到共享單車(chē),從長視頻(pín)到短視頻(pín),業務和模式的創新不斷。近幾年尤以頭條系的業務試錯見諸于各報端,從資(zī)訊到直播,再到短視頻(pín),是一(yī)波接一(yī)波。
當前不論是大(dà)的互聯網公司,還是創業性的小(xiǎo)公司,要想在新的領域摸索出一(yī)番天地,必須不斷試錯。移動領域的業務不斷試錯,要求能快速産出各業務對應的創新App。
集團業務的逐步擴大(dà)與細化催生(shēng)多App
互聯網江湖早已三分(fēn)天下(xià),巨頭已經建立,大(dà)的互聯網平台很難形成。但越是大(dà)的互聯網平台,越擔心垂直細分(fēn)業務的進攻。爲應對進攻,集團業務也需要在一(yī)些領域逐步擴大(dà)和細化,垂直App應運而生(shēng)。
垂直App與創新App的差距在于,垂直App是基于現有平台業務細分(fēn)而來,而創新App是平台業務所沒有的。
另外(wài),爲了應對應用市場的分(fēn)發和對包大(dà)小(xiǎo)敏感的用戶,這幾年極速包幾乎成爲各大(dà)公司的必備App。
集團業務的合并融合催生(shēng)多App交叉
業務的收購、合并也是大(dà)型互聯網公司常有的事。收購合并後的業務如何融合,如何既能保持業務的獨立性,又(yòu)能節省集團研發資(zī)源,還能支持一(yī)套交叉業務(又(yòu)稱垂直業務)代碼在各獨立App運行,是一(yī)個重要又(yòu)複雜(zá)的問題。比如今年58集團内安居客房産業務和原58房産業務的融合就是一(yī)個典型的案例。
App工(gōng)廠目标、架構與實施方法
App工(gōng)廠的實施目标
1.App工(gōng)廠有以下(xià)目标:
标準化能力的産出,爲App研發提效增速标準化能力是實現App工(gōng)廠的基礎,标準化能力與App業務代碼無耦合關系,比如React Native SDK,網絡庫、緩存庫等。
支持創新App、垂直App、極速App的生(shēng)成和叠代同一(yī)套代碼,根據配置,能按需生(shēng)成不同App所需的代碼。按需生(shēng)成是關鍵和核心,不給App工(gōng)廠生(shēng)成的App代碼攜帶任何無用代碼,增加包大(dà)小(xiǎo)。
支持垂直業務在獨立App上的平移App工(gōng)廠依附于58App框架代碼上,馬甲包、極速包與App工(gōng)廠(58App)是一(yī)個子集與全集的關系。但類似安居客App與58App是兩個獨立App,有交集(公共底層代碼或某些業務代碼),業務代碼集合不一(yī)樣。
針對獨立App的公共業務代碼,定義爲垂直業務。App工(gōng)廠在統一(yī)底層服務的前提下(xià),也要支持垂直業務在獨立App上的平移。即一(yī)套業務代碼,能在兩個或多個獨立App上運行。