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