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