身邊的朋友喜歡分層架構(gòu)唠叛,看到的一張張圖都是分層的改备。分層從哪來的?
一個比較大的可能是受TCP IP 協(xié)議分層形式影響下梢。學過網(wǎng)絡基礎課程的都應該對七層網(wǎng)絡模型有印象。這個模型有點誤導塞蹭,咋看上去是層次結(jié)構(gòu)孽江,上層依賴下層,這么經(jīng)典的體系結(jié)構(gòu)都分層了番电,自己做的小破應用也應該向經(jīng)典看齊岗屏,結(jié)果導致這種分層泛濫。
仔細理解七層網(wǎng)絡模型漱办,他描述的是協(xié)議實現(xiàn)軟件嗎这刷?不是滴。這個模型說的是數(shù)據(jù)傳輸過程的層層封裝娩井,上層的數(shù)據(jù)被下層封裝暇屋,不是協(xié)議軟件的結(jié)構(gòu)。
那協(xié)議軟件的結(jié)構(gòu)是什么樣的洞辣?是分模塊的咐刨,模塊間有依賴關系。有哪些模塊呢扬霜?一層一個模塊定鸟,相鄰層的模塊有依賴關系。我沒有在耍你著瓶,也不是在玩文字游戲联予。重點是處理上層邏輯的模塊不依賴處理下層邏輯的模塊,而是相反,下層依賴上層躯泰。沒錯,就是依賴倒置华糖。舉個例子麦向。傳輸層依賴網(wǎng)絡層嗎?是的客叉,傳輸層依賴網(wǎng)絡層進行數(shù)據(jù)報文傳輸诵竭。但是,傳輸層依賴網(wǎng)絡層的具體實現(xiàn)嗎兼搏?傳輸層需要知道是IP數(shù)據(jù)報還是X.25卵慰?不需要,傳輸層只要定義網(wǎng)絡層的抽象接口就好了佛呻。所以說網(wǎng)絡層依賴傳輸層的抽象接口裳朋,下層依賴上層。
如果層層都是這樣的關系吓著,到底分成多少層重要嗎鲤嫡?是否分層還重要嗎?一點都不重要绑莺,完全沒必要被層次的形式束縛暖眼。只要把職責垂直切分,形成模塊纺裁,模塊依賴另一個模塊的抽象诫肠,你就獲得靈活的結(jié)構(gòu)。相反欺缘,受制于層次結(jié)構(gòu)的束縛栋豫,硬生生的水平切分,你的到的永遠是支離破碎的谚殊,僵化的結(jié)構(gòu)笼才,你永遠無法說清層次間的邊界,還會時不時地在層次間到處塞小層次络凿。
如果你的層次里出現(xiàn)了core骡送,manager,domain的字樣絮记,恭喜你摔踱,你在做水平切割的層次,好好跟小伙伴解釋什么是core怨愤,什么不是core吧~~