前端架構(gòu)思想:聚類分層

思想來源

在做前端應(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)用場景,但是這種思想是通用的惦辛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劳秋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胖齐,更是在濱河造成了極大的恐慌玻淑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呀伙,死亡現(xiàn)場離奇詭異补履,居然都是意外死亡,警方通過查閱死者的電腦和手機剿另,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門箫锤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雨女,你說我怎么就攤上這事谚攒。” “怎么了氛堕?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵馏臭,是天一觀的道長。 經(jīng)常有香客問我讼稚,道長括儒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任锐想,我火速辦了婚禮帮寻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痛倚。我一直安慰自己规婆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抒蚜,像睡著了一般掘鄙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗡髓,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天操漠,我揣著相機與錄音,去河邊找鬼饿这。 笑死浊伙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的长捧。 我是一名探鬼主播嚣鄙,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼串结!你這毒婦竟也來了哑子?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤肌割,失蹤者是張志新(化名)和其女友劉穎卧蜓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體把敞,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡弥奸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奋早。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盛霎。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伸蚯,靈堂內(nèi)的尸體忽然破棺而出摩渺,到底是詐尸還是另有隱情,我是刑警寧澤剂邮,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站横侦,受9級特大地震影響挥萌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枉侧,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一引瀑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榨馁,春花似錦憨栽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屡萤。三九已至,卻和暖如春掸宛,著一層夾襖步出監(jiān)牢的瞬間死陆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工唧瘾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留措译,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓饰序,卻偏偏與公主長得像领虹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子求豫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評論 25 707
  • 用兩張圖告訴你掠械,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,699評論 2 59
  • 引言 在討論DDD分層架構(gòu)的模式之前注祖,我們先一起回顧一下DDD和分層架構(gòu)的相關(guān)知識猾蒂。 DDD DDD(Domain...
    _張曉龍_閱讀 160,416評論 16 193
  • 一直在犯愁文案怎樣寫?用哪個筆記模式的筆記本好是晨?突然發(fā)現(xiàn)了《簡書》肚菠,它可以讓我隨時隨地編輯文案,提高寫作能力罩缴,是個...
    快樂似神仙閱讀 184評論 0 0
  • 每當(dāng)我們照鏡子發(fā)現(xiàn)因晚睡黑眼圈又深了蚊逢,立志從此要早睡早起去,可是堅持沒過幾天又變回了夜貓子箫章;每當(dāng)我們想學(xué)好英語方便...
    我就是卷貓閱讀 258評論 1 0