領域驅(qū)動的事實與謬誤 一 DDD 與 MVC
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
本文有以下幾個目的:
MVC到底在說什么??MVC(Model-View-Controller)架構由挪威計算機科學家Trygve Mikkjel Heyerdahl Reenskaug于1979年在施樂帕克研究中心(Xerox PARC)訪問期間提出。這一架構最初是為Smalltalk編程語言設計的,旨在解決圖形用戶界面(GUI)開發(fā)中數(shù)據(jù)管理與用戶交互的復雜性問題。當時Smalltalk的GUI需要支持動態(tài)交互(如用戶操作實時更新數(shù)據(jù)),傳統(tǒng)單體架構難以維護,MVC通過解耦輸入-處理-輸出流程,首次實現(xiàn)了界面與邏輯的分離。 ??Reenskaug認為,GUI應用需要將不同功能模塊解耦,以應對數(shù)據(jù)復雜性和用戶交互的動態(tài)性。他提出將軟件系統(tǒng)劃分為三個核心組件:
??MVC的Model本身包含基礎業(yè)務邏輯(如數(shù)據(jù)驗證),但復雜業(yè)務場景下需獨立的應用邏輯層(如Service層)來組織流程,這與DDD的領域建模形成互補。因此,四層架構(Model-View-Controller-Service)的出現(xiàn)是企業(yè)級開發(fā)的演進,而非MVC原生缺陷。 DDD到底在說什么??DDD由Eric Evans 在2003年出版的經(jīng)典著作《領域驅(qū)動設計:軟件核心復雜性應對之道》中系統(tǒng)提出。其誕生源于對復雜業(yè)務系統(tǒng)開發(fā)困境的反思:
DDD與MVC并不沖突??在傳統(tǒng)MVC架構下,解決GUI問題時,我們會設計GUI層面的技術模型,再根據(jù)模型渲染界面。同理,解決業(yè)務邏輯問題時,也可以設計一個領域模型,再基于模型開發(fā)業(yè)務邏輯。 ??從圖中不難看出:領域驅(qū)動設計的核心是教你如何設計業(yè)務邏輯, 注意,是"業(yè)務邏輯設計",而非技術分層設計。原因很簡單:DDD原書明確指出,這不是一本教你寫代碼的書,而是教你如何應對復雜軟件的方法論。 ??無論哪個層面的技術開發(fā),都可以先建模,再基于模型開發(fā), 這是幾乎所有行業(yè)都在使用的通用手段。 DDD本來就不存在統(tǒng)一的代碼規(guī)范,原書也未給出具體實現(xiàn)手段??回到上圖,你會發(fā)現(xiàn):任何一個技術維度的修改,都不需要其他維度的直接支持,甚至可以單獨調(diào)整某個維度------這正是DDD在戰(zhàn)術設計上想表達的理念。但這部分內(nèi)容被放在原書的最后章節(jié),不僅因為前面的章節(jié)是前提,更因為代碼架構并非DDD的核心。 DDD的核心是什么?
代碼規(guī)范的真相 : ??DDD不強制規(guī)定具體代碼結構和命名,但業(yè)界基于實踐形成了通用分層原則(如四層架構:表現(xiàn)層、應用層、領域?qū)?、基礎設施層)。例如:
爭議與選擇 : ??業(yè)界關于代碼結構的最大爭議是按功能分包 vs 按技術層分包:
附錄一些可以參考的代碼和技術文章?轉(zhuǎn)自https://www.cnblogs.com/mrye/p/18856880 該文章在 2025/5/7 9:12:07 編輯過 |
關鍵字查詢
相關文章
正在查詢... |