思想來源
在做前端應(yīng)用的過程中细疚,我經(jīng)常發(fā)現(xiàn)組件之間寇损、store的module之間關(guān)系錯綜復(fù)雜毁靶,扁平的結(jié)構(gòu)并不能表示其關(guān)系,隨著組件和module的增加皇拣,代碼越來越混亂,維護成本也越來也高薄嫡。我對這個問題的解決進行了一系列思考氧急,實踐的過程中總結(jié)出了聚類分層思想
。
聚類分層思想
什么是聚類分層思想
前端現(xiàn)在主流的組件-flux
架構(gòu)中(以vue舉例)毫深,有組件層吩坝、store層,組件層可以細分為模板和vm哑蔫,store層又可以拆分成各個模塊钉寝。
隨著功能和業(yè)務(wù)邏輯的逐漸增多,每層和每個模塊都有很多相同的東西闸迷,比如組件層會有很多組件嵌纲,store層會有很多module,一個組件的vm也會有很多的methods腥沽。當(dāng)這些東西的數(shù)量逐漸增多時逮走,他們之間的關(guān)系會越來越模糊,所以今阳,我們會進行一下分類师溅,比如把組件分為頁面組件和基礎(chǔ)組件邓嘹,這是常用的分類。把有一定共同特征的某種資源(組件险胰、module汹押、methods等)進行聚類,使之多出一個層次起便,這樣會使得結(jié)構(gòu)更加清晰棚贾,把扁平的結(jié)構(gòu)變成更加清晰的多層結(jié)構(gòu),這就是聚類分層思想榆综。
扁平化和層次化
就像公司發(fā)展一樣妙痹,創(chuàng)業(yè)公司架構(gòu)一般都比較的扁平化,基礎(chǔ)的部門鼻疮,每個部門分個一兩層怯伊,隨著公司業(yè)務(wù)的發(fā)展,架構(gòu)也會從扁平走向多層判沟,比如每個部門先按照業(yè)務(wù)分成幾個事業(yè)部耿芹,然后每個事業(yè)部再分為幾層。這些都是公司大了以后保證結(jié)構(gòu)和職責(zé)的清晰必經(jīng)之路挪哄。
應(yīng)用也是一樣的吧秕,隨著功能和業(yè)務(wù)邏輯的增多,在之前代碼的基礎(chǔ)上進行開發(fā)需要了解的東西也越來越多迹炼,依然用扁平的結(jié)構(gòu)會導(dǎo)致學(xué)習(xí)和維護的成本增加砸彬,同時因為結(jié)構(gòu)和職責(zé)的不清晰也會容易把代碼放錯位置,功能越來越多的過程斯入,也就伴隨著代碼越來越混亂砂碉。
聚類分層思想的應(yīng)用
扁平的結(jié)構(gòu)變成多層的結(jié)構(gòu),可以使用聚類分層思想刻两,按照某一種特征來分類增蹭。比如 組件的聚類特征可以是組件的復(fù)用程度,分為基礎(chǔ)的可復(fù)用的組件和組合基礎(chǔ)組件的容器組件
也可以按照組件是否渲染ui分為2類闹伪,然后負責(zé)渲染ui的組件根據(jù)負責(zé)展示還是負責(zé)交互分為交互組件和展示組件沪铭,不負責(zé)渲染ui的可以根據(jù)是負責(zé)接入數(shù)據(jù)的還是其他功能可分為接入組件和功能組件。功能組件比如 router-view偏瓤,transition等杀怠。
vm層的methods的聚類特征可以是處理的內(nèi)容,分為處理交互事件的event handler厅克,處理通用邏輯的util method赔退,也可以是處理中間過程的 middle method。
store層的module的聚類特征可以是封裝的數(shù)據(jù)所對應(yīng)的目標,分為 對應(yīng)頁面組件的硕旗,對應(yīng)基礎(chǔ)組件的窗骑,對應(yīng)實體的,和一些通用數(shù)據(jù)的漆枚。
上面是一些常見的和我想出的聚類特征和根據(jù)聚類特征的分類結(jié)果创译,當(dāng)然,聚類的特征并不唯一墙基,比如也可以根據(jù)業(yè)務(wù)特征來聚類软族,具體的聚類特征根據(jù)具體情況來確定。
流程分層與聚類分層
代碼運行是有一定的流程的残制,比如客戶端的應(yīng)用立砸,主要的流程就是取服務(wù)端的數(shù)據(jù)處理后顯示在界面上,把用戶在界面輸入的數(shù)據(jù)處理后發(fā)送到服務(wù)端初茶,同時本地可能也會維護一份副本颗祝。
應(yīng)用會使用一種架構(gòu)模式來組織這個流程,比如mvc
或者組件-flux
等恼布,大體上把數(shù)據(jù)螺戳、邏輯、視圖進行了分類桥氏,不同的代碼和資源放入不同的層次温峭。每條業(yè)務(wù)流程需要在每一層建立對應(yīng)的模塊猛铅。
但是隨著功能和業(yè)務(wù)流程的逐漸復(fù)雜字支,也就是每層的模塊逐漸增多,每層模塊與模塊之間的關(guān)系也會越來越錯綜復(fù)雜奸忽,但是并沒有一種明確的思想或原來來明確指出這個階段該怎么辦堕伪。
聚類分層
就是解決隨著業(yè)務(wù)流程增多而增多的模塊通過扁平的結(jié)構(gòu)不能表現(xiàn)出其之間的復(fù)雜關(guān)系的問題的思想。使用聚類的思想栗菜,按照某一種特征欠雌,對按流程分層的每一層的模塊,再按照某一種特征進行更細的分層疙筹,使得模塊之間的關(guān)系變得更加清晰富俄。不同業(yè)務(wù)模塊之間的關(guān)系不同,聚類基于的特征點也不同而咆。
總結(jié)
聚類分層思想
是解決扁平化的結(jié)構(gòu)不能清晰表示資源之間的關(guān)系的問題霍比,通過按照一定的特征來聚類,使之層次化暴备,使資源間的關(guān)系更清晰也更易維護的思想悠瞬。
按照不同的應(yīng)用場景,聚類特征也不盡相同,但有一些通用的聚類方式浅妆,比如容器組件望迎、展示組件等。
聚類分層是對流程分層的補充凌外,mvc
或者組件-flux
的架構(gòu)只是對流程的抽象和分層辩尊。聚類分層就是針對每一個流程分層內(nèi)部的扁平的資源,通過聚類特征康辑,使之層次化对省,結(jié)構(gòu)更清晰。
此外晾捏,聚類分層的思想并不只是在前端應(yīng)用中可用蒿涎,雖然我只是舉了一些前端應(yīng)用場景,但是這種思想是通用的惦辛。