身邊的朋友喜歡分層架構,看到的一張張圖都是分層的。分層從哪來的?
一個比較大的可能是受TCP IP 協議分層形式影響。學過網絡基礎課程的都應該對七層網絡模型有印象。這個模型有點誤導,咋看上去是層次結構,上層依賴下層,這么經典的體系結構都分層了,自己做的小破應用也應該向經典看齊,結果導致這種分層泛濫。
仔細理解七層網絡模型,他描述的是協議實現軟件嗎?不是滴。這個模型說的是數據傳輸過程的層層封裝,上層的數據被下層封裝,不是協議軟件的結構。
那協議軟件的結構是什么樣的?是分模塊的,模塊間有依賴關系。有哪些模塊呢?一層一個模塊,相鄰層的模塊有依賴關系。我沒有在耍你,也不是在玩文字游戲。重點是處理上層邏輯的模塊不依賴處理下層邏輯的模塊,而是相反,下層依賴上層。沒錯,就是依賴倒置。舉個例子。傳輸層依賴網絡層嗎?是的,傳輸層依賴網絡層進行數據報文傳輸。但是,傳輸層依賴網絡層的具體實現嗎?傳輸層需要知道是IP數據報還是X.25?不需要,傳輸層只要定義網絡層的抽象接口就好了。所以說網絡層依賴傳輸層的抽象接口,下層依賴上層。
如果層層都是這樣的關系,到底分成多少層重要嗎?是否分層還重要嗎?一點都不重要,完全沒必要被層次的形式束縛。只要把職責垂直切分,形成模塊,模塊依賴另一個模塊的抽象,你就獲得靈活的結構。相反,受制于層次結構的束縛,硬生生的水平切分,你的到的永遠是支離破碎的,僵化的結構,你永遠無法說清層次間的邊界,還會時不時地在層次間到處塞小層次。
如果你的層次里出現了core,manager,domain的字樣,恭喜你,你在做水平切割的層次,好好跟小伙伴解釋什么是core,什么不是core吧~~