亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

領(lǐng)域驅(qū)動(dòng)的事實(shí)與謬誤 一 DDD 與 MVC

freeflydom
2025年5月7日 9:12 本文熱度 743

本文有以下幾個(gè)目的:

  1. 讓新手少交智商稅,少浪費(fèi)時(shí)間看一些軟文。
  2. 普及一個(gè)基本概念:了解一項(xiàng)觀點(diǎn)的提出年代和最初初衷,才能更好地掌握其精粹。
  3. 我想指出市場(chǎng)上一些誤人子弟的軟文。

首先說明:文中所說的謬誤并非原書的謬誤,而是很多網(wǎng)上水軍寫的軟文在不斷誤人子弟、傳播錯(cuò)誤認(rèn)知。

MVC到底在說什么

??MVC(Model-View-Controller)架構(gòu)由挪威計(jì)算機(jī)科學(xué)家Trygve Mikkjel Heyerdahl Reenskaug于1979年在施樂帕克研究中心(Xerox PARC)訪問期間提出。這一架構(gòu)最初是為Smalltalk編程語言設(shè)計(jì)的,旨在解決圖形用戶界面(GUI)開發(fā)中數(shù)據(jù)管理與用戶交互的復(fù)雜性問題。當(dāng)時(shí)Smalltalk的GUI需要支持動(dòng)態(tài)交互(如用戶操作實(shí)時(shí)更新數(shù)據(jù)),傳統(tǒng)單體架構(gòu)難以維護(hù),MVC通過解耦輸入-處理-輸出流程,首次實(shí)現(xiàn)了界面與邏輯的分離。

??Reenskaug認(rèn)為,GUI應(yīng)用需要將不同功能模塊解耦,以應(yīng)對(duì)數(shù)據(jù)復(fù)雜性和用戶交互的動(dòng)態(tài)性。他提出將軟件系統(tǒng)劃分為三個(gè)核心組件:

  • 模型(Model) :封裝數(shù)據(jù)和業(yè)務(wù)邏輯,獨(dú)立于界面展示,例如數(shù)據(jù)庫結(jié)構(gòu)或業(yè)務(wù)規(guī)則。
  • 視圖(View):負(fù)責(zé)用戶界面的呈現(xiàn),直接與用戶交互,例如窗口、按鈕等可視化元素。
  • 控制器(Controller):協(xié)調(diào)模型與視圖的交互,處理用戶輸入并更新模型狀態(tài),例如按鈕點(diǎn)擊后的邏輯判斷。

??MVC的Model本身包含基礎(chǔ)業(yè)務(wù)邏輯(如數(shù)據(jù)驗(yàn)證),但復(fù)雜業(yè)務(wù)場(chǎng)景下需獨(dú)立的應(yīng)用邏輯層(如Service層)來組織流程,這與DDD的領(lǐng)域建模形成互補(bǔ)。因此,四層架構(gòu)(Model-View-Controller-Service)的出現(xiàn)是企業(yè)級(jí)開發(fā)的演進(jìn),而非MVC原生缺陷。

DDD到底在說什么

??DDD由Eric Evans 在2003年出版的經(jīng)典著作《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對(duì)之道》中系統(tǒng)提出。其誕生源于對(duì)復(fù)雜業(yè)務(wù)系統(tǒng)開發(fā)困境的反思:

  1. 傳統(tǒng)開發(fā)的痛點(diǎn)

    • 軟件模型與真實(shí)業(yè)務(wù)領(lǐng)域脫節(jié),導(dǎo)致需求頻繁變更時(shí)難以維護(hù);
    • 技術(shù)團(tuán)隊(duì)與領(lǐng)域?qū)<遥ㄈ鐦I(yè)務(wù)分析師、行業(yè)專家)溝通低效,術(shù)語不統(tǒng)一,模型設(shè)計(jì)偏離實(shí)際業(yè)務(wù)邏輯;
    • 當(dāng)業(yè)務(wù)復(fù)雜度高(如金融、供應(yīng)鏈、醫(yī)療等領(lǐng)域)時(shí),傳統(tǒng)開發(fā)方法(如數(shù)據(jù)驅(qū)動(dòng)設(shè)計(jì)、貧血模型)無法有效管理復(fù)雜性,代碼逐漸淪為"意大利面條"。
  2. 核心目標(biāo) :

    Evans認(rèn)為,應(yīng)對(duì)復(fù)雜業(yè)務(wù)系統(tǒng)的關(guān)鍵在于將領(lǐng)域知識(shí)作為設(shè)計(jì)的核心,通過建立清晰、準(zhǔn)確的領(lǐng)域模型,讓技術(shù)實(shí)現(xiàn)緊密貼合業(yè)務(wù)本質(zhì),從而提升系統(tǒng)的可維護(hù)性和擴(kuò)展性。

    • 戰(zhàn)略設(shè)計(jì):通過限界上下文(Bounded Context)劃分業(yè)務(wù)邊界,明確領(lǐng)域模型的適用范圍(如電商中的"訂單域"與"支付域"),解決業(yè)務(wù)與技術(shù)對(duì)齊問題;
    • 戰(zhàn)術(shù)設(shè)計(jì):通過實(shí)體、值對(duì)象、聚合根等工具實(shí)現(xiàn)領(lǐng)域模型,確保業(yè)務(wù)規(guī)則封裝在代碼中。

DDD與MVC并不沖突

??在傳統(tǒng)MVC架構(gòu)下,解決GUI問題時(shí),我們會(huì)設(shè)計(jì)GUI層面的技術(shù)模型,再根據(jù)模型渲染界面。同理,解決業(yè)務(wù)邏輯問題時(shí),也可以設(shè)計(jì)一個(gè)領(lǐng)域模型,再基于模型開發(fā)業(yè)務(wù)邏輯。

??從圖中不難看出:領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的核心是教你如何設(shè)計(jì)業(yè)務(wù)邏輯, 注意,是"業(yè)務(wù)邏輯設(shè)計(jì)",而非技術(shù)分層設(shè)計(jì)。原因很簡(jiǎn)單:DDD原書明確指出,這不是一本教你寫代碼的書,而是教你如何應(yīng)對(duì)復(fù)雜軟件的方法論。

??無論哪個(gè)層面的技術(shù)開發(fā),都可以先建模,再基于模型開發(fā), 這是幾乎所有行業(yè)都在使用的通用手段。

DDD本來就不存在統(tǒng)一的代碼規(guī)范,原書也未給出具體實(shí)現(xiàn)手段

??回到上圖,你會(huì)發(fā)現(xiàn):任何一個(gè)技術(shù)維度的修改,都不需要其他維度的直接支持,甚至可以單獨(dú)調(diào)整某個(gè)維度------這正是DDD在戰(zhàn)術(shù)設(shè)計(jì)上想表達(dá)的理念。但這部分內(nèi)容被放在原書的最后章節(jié),不僅因?yàn)榍懊娴恼鹿?jié)是前提,更因?yàn)榇a架構(gòu)并非DDD的核心。

DDD的核心是什么?

  • 統(tǒng)一語言:團(tuán)隊(duì)(包括業(yè)務(wù)專家)使用一致的術(shù)語描述業(yè)務(wù)規(guī)則(如"訂單已支付"對(duì)應(yīng)領(lǐng)域事件);
  • 領(lǐng)域模型:圍繞業(yè)務(wù)概念設(shè)計(jì)代碼,而非圍繞數(shù)據(jù)庫或技術(shù)框架;
  • 解耦思想:通過聚合根、倉儲(chǔ)等模式隔離業(yè)務(wù)邏輯與技術(shù)細(xì)節(jié)。

代碼規(guī)范的真相 :

??DDD不強(qiáng)制規(guī)定具體代碼結(jié)構(gòu)和命名,但業(yè)界基于實(shí)踐形成了通用分層原則(如四層架構(gòu):表現(xiàn)層、應(yīng)用層、領(lǐng)域?qū)?、基礎(chǔ)設(shè)施層)。例如:

  • 領(lǐng)域?qū)樱―omain Layer)封裝核心業(yè)務(wù)邏輯,包含實(shí)體、值對(duì)象、聚合根;
  • 應(yīng)用層(Application Layer)協(xié)調(diào)領(lǐng)域?qū)ο?,處理事?wù)和權(quán)限;
  • 基礎(chǔ)設(shè)施層(Infrastructure Layer)處理數(shù)據(jù)庫、消息隊(duì)列等技術(shù)細(xì)節(jié)。

爭(zhēng)議與選擇 :

??業(yè)界關(guān)于代碼結(jié)構(gòu)的最大爭(zhēng)議是按功能分包 vs 按技術(shù)層分包

  • 按功能分包(如order/ user/)利于業(yè)務(wù)模塊隔離,適合大型復(fù)雜系統(tǒng);
  • 按技術(shù)層分包(如controller/ service/)便于技術(shù)棧管理,適合中小型項(xiàng)目。 兩者無絕對(duì)優(yōu)劣,需結(jié)合團(tuán)隊(duì)規(guī)模和業(yè)務(wù)復(fù)雜度選擇, 但是無論如何每一個(gè)項(xiàng)目團(tuán)隊(duì)都應(yīng)該做的,就是對(duì)業(yè)務(wù)進(jìn)行建模分析,對(duì)團(tuán)隊(duì)開發(fā)形成整齊劃一的技術(shù)規(guī)范。

附錄一些可以參考的代碼和技術(shù)文章

?轉(zhuǎn)自https://www.cnblogs.com/mrye/p/18856880


該文章在 2025/5/7 9:12:07 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved