前言
前面的組件化思考和落地介紹了組件化在我們項目中的大致設計惠拭,實際落地效果也不錯柄沮。同時也遇到了多App業(yè)務迭代的情況,于是落地了融合開發(fā)方式-單工程多target的多App方案钓辆。
本文基于實際迭代中遇到的問題,繼續(xù)分析當下存在的問題待牵,以及對于未來迭代方向做一個梳理。
正文
整體視角
首先介紹工程當前整體設計喇勋,整體工程視角的架構(gòu)圖如下:
業(yè)務實現(xiàn)層和業(yè)務接口層缨该,是常迭代的業(yè)務部分;
業(yè)務接口層川背,存放業(yè)務組件對外的能力贰拿,這些能力大部分用接口來表述。
業(yè)務實現(xiàn)層熄云,存放對接口的具體業(yè)務實現(xiàn)膨更,承載著業(yè)務組件的大部分邏輯。
業(yè)務基礎層缴允,App內(nèi)通用的基礎能力荚守,通常包數(shù)據(jù)結(jié)構(gòu)、App級UI組件练般、基礎服務能力矗漾。
通用基礎層,工程的二方庫和三方庫依賴薄料,引入更多擴展能力敞贡。
組件視角
組件內(nèi)部的結(jié)構(gòu)設計,主體是分為對外部分和對內(nèi)部分摄职。
對外部分嫡锌,其他業(yè)務組件可以依賴虑稼,整體可以分為業(yè)務接口層琳钉、服務接口層和業(yè)務基礎層势木。
業(yè)務接口層,存放業(yè)務抽象接口歌懒、枚舉啦桌、常量,封裝組件業(yè)務能力及皂;
服務接口層甫男,存放以服務形式提供的業(yè)務能力,該服務通常是由業(yè)務組件進行維護验烧,所以不納入App通用的服務層板驳。
業(yè)務基礎層,存放業(yè)務對外提供的UI基礎能力和數(shù)據(jù)接口碍拆,這部分UI和數(shù)據(jù)由業(yè)務業(yè)務組件進行維護若治,所以不納入App通用的基礎層。
對內(nèi)部分感混,是其他業(yè)務組件不可依賴端幼,是對外部分中業(yè)務接口、服務接口的具體實現(xiàn)弧满。
問題分析
業(yè)務迭代角度
1婆跑、業(yè)務組件內(nèi)存在其他業(yè)務組件邏輯,最常見的就是業(yè)務組件A因為存在部分視圖庭呜、邏輯是屬于業(yè)務B滑进、業(yè)務C、業(yè)務D募谎,于是業(yè)務組件A就在組件內(nèi)直接引入組件B/C/D扶关,長期不便于業(yè)務做權(quán)限管控和穩(wěn)定性治理,同時也會增加未來迭代的理解成本近哟;
2驮审、業(yè)務組件對外提供的業(yè)務能力、UI組件吉执、基礎功能等疯淫,都由接口層承載,即使只是依賴組件A的某個特定功能戳玫,也要直接依賴整個組件A熙掺;
...
工程架構(gòu)角度
1、接口層與實現(xiàn)層咕宿,基礎層與實現(xiàn)層都有隔離币绩,但是仍然存在同層之間相互依賴較多的情況蜡秽,甚至會有UI組件、數(shù)據(jù)層依賴服務層情況缆镣;
2芽突、多App場景,如果想要讓某個App下去除某個組件董瞻,由于組件依賴較多寞蚌,會導致潛在較多風險;
...
架構(gòu)演進
架構(gòu)演進的思路钠糊,主要考慮當下要素:
1挟秤、多App迭代述求,以融合開發(fā)方式為多App提效抄伍,同時保留業(yè)務細節(jié)差異化能力艘刚,以及整體業(yè)務模塊剝離的包體積優(yōu)化空間;
2截珍、SaaS同構(gòu)迭代攀甚,未來相關(guān)業(yè)務既要接入SaaS,又要迭代SaaS笛臣;
3云稚、質(zhì)量和效率提升,更加清晰的工程架構(gòu)來承載復雜業(yè)務沈堡,層級之間更加清晰并有防劣化静陈,復雜業(yè)務組件有良好設計來降低理解成本
基于上述分析和考慮,對原來架構(gòu)進行進一步調(diào)整:
改動點分析
1诞丽、部分業(yè)務組件平臺化鲸拥,組件內(nèi)部業(yè)務邏輯實現(xiàn)依賴反轉(zhuǎn),同時沉淀出業(yè)務的數(shù)據(jù)層和UI基礎層僧免;
2刑赶、服務層建立,架構(gòu)更加清晰合理懂衩,避免基礎層依賴服務層撞叨,同時也方便做依賴防劣化卡口;
3浊洞、數(shù)據(jù)治理牵敷,專注于數(shù)據(jù)邏輯,只能被上層業(yè)務引用法希,不依賴其他業(yè)務組件和服務層枷餐;
4、UI基礎層搭建苫亦,業(yè)務UI基礎能力沉淀毛肋,可以依賴只能被上層業(yè)務引用怨咪,不依賴其他業(yè)務組件和服務層;
5润匙、業(yè)務基礎庫和通用基礎庫分隔诗眨,業(yè)務基礎庫只服務于當前工程,通用基礎庫服務于類SaaS的多宿主趁桃;
6辽话、配合多包SOP調(diào)整差異化組件,將大部分固定差異用配置化的方式進行處理卫病;
總結(jié)
架構(gòu)演進是一件需要持之以恒的事情,要權(quán)衡好其中的效率提升和維護成本典徘。
架構(gòu)不是越復雜越好蟀苛。越多的層級固然能更好做邏輯拆分、依賴隔離逮诲,但是也有更多的開發(fā)能力和理解能力要求帜平。
如無必要,勿增實體梅鹦。