色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

DDD是什么?DDD核心概念梳理

jf_ro2CN3Fa ? 來(lái)源:悟空聊架構(gòu) ? 作者:悟空聊架構(gòu) ? 2023-09-07 11:12 ? 次閱讀

一、概述

DDD 是什么,DDD 的英文全稱是 Domain-Driven Design,翻譯過(guò)來(lái)就是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。

這種設(shè)計(jì)一般是用在微服務(wù)的系統(tǒng)中,當(dāng)我們聊微服務(wù)的時(shí)候,爭(zhēng)論最多的就是如何進(jìn)行微服務(wù)的拆分,這也是最讓人產(chǎn)生爭(zhēng)議的地方。

當(dāng)我們聊微服務(wù)也必然會(huì)會(huì)聊到中臺(tái),中臺(tái)又是什么呢?

中臺(tái)

中臺(tái)從 2015 年提出,就已經(jīng)被我們熟知,但是每個(gè)人對(duì)中臺(tái)的認(rèn)識(shí)可能都千差萬(wàn)別,有沒有一個(gè)大家都比較認(rèn)可的定義呢?

將通用的可復(fù)用的業(yè)務(wù)能力沉淀到中臺(tái)業(yè)務(wù)模型,實(shí)現(xiàn)企業(yè)級(jí)能力復(fù)用。

因此中臺(tái)面臨的首要問(wèn)題就是中臺(tái)領(lǐng)域模型的重構(gòu)。

而中臺(tái)落地時(shí),依然會(huì)面臨微服務(wù)設(shè)計(jì)和拆分的問(wèn)題。

微服務(wù) :中臺(tái)落地時(shí)需要用微服務(wù)進(jìn)行支撐。

中臺(tái) :復(fù)用業(yè)務(wù),實(shí)現(xiàn)企業(yè)級(jí)能力復(fù)用。

DDD :對(duì)中臺(tái)進(jìn)行領(lǐng)域建模,實(shí)現(xiàn)適合企業(yè)發(fā)展的中臺(tái)。

DDD 可以說(shuō)是微服務(wù)和中臺(tái)的產(chǎn)品經(jīng)理。我們?nèi)憳I(yè)務(wù)功能時(shí),是面向領(lǐng)域的,而不是面向數(shù)據(jù)庫(kù)表來(lái)實(shí)現(xiàn)代碼的。

二、DDD 是什么?

DDD 的核心思想:是通過(guò)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)方法定義領(lǐng)域模型,從而確定業(yè)務(wù)和應(yīng)用邊界,保證業(yè)務(wù)模型與代碼模型的一致性。

DDD 是一種處理高度復(fù)雜領(lǐng)域的設(shè)計(jì)思想,它試圖分離技術(shù)實(shí)現(xiàn)的復(fù)雜性,并圍繞業(yè)務(wù)概念構(gòu)建領(lǐng)域模型來(lái)控制業(yè)務(wù)的復(fù)雜性,以解決軟件難以理解,難以演進(jìn)的問(wèn)題。

戰(zhàn)略設(shè)計(jì) :主要從業(yè)務(wù)視角出發(fā),建立業(yè)務(wù)領(lǐng)域模型,劃分領(lǐng)域邊界,建立通用語(yǔ)言的限界上下文,限界上下文可以作為微服務(wù)設(shè)計(jì)的參考邊界。

戰(zhàn)術(shù)設(shè)計(jì) :則從技術(shù)視角出發(fā),側(cè)重于領(lǐng)域模型的技術(shù)實(shí)現(xiàn),完成軟件開發(fā)和落地,包括:聚合根、實(shí)體、值對(duì)象、領(lǐng)域服務(wù)、應(yīng)用服務(wù)和資源庫(kù)等代碼邏輯的設(shè)計(jì)和實(shí)現(xiàn)。

三、DDD 架構(gòu)分層

首先我們來(lái)看下架構(gòu)分層的原理圖:

a5df8832-4d1e-11ee-a25d-92fbcf53809c.png

用戶接口

用戶接口層主要包含用戶界面、Web 服務(wù)。

用戶接口層負(fù)責(zé)向用戶顯示信息和解釋用戶指令。這里的用戶可能是:用戶、程序、自動(dòng)化測(cè)試和批處理腳本等等。

應(yīng)用層

應(yīng)用層不應(yīng)該有業(yè)務(wù)邏輯。它是很薄的一層,理論上不應(yīng)該有業(yè)務(wù)規(guī)則或邏輯,主要面向用例和流程相關(guān)的操作。

應(yīng)用服務(wù)是在應(yīng)用層的,它負(fù)責(zé)服務(wù)的組合、編排和轉(zhuǎn)發(fā),負(fù)責(zé)處理業(yè)務(wù)用例的執(zhí)行順序以及結(jié)果的拼裝,以粗粒度的服務(wù)通過(guò) API 網(wǎng)關(guān)向前端發(fā)布。還有,應(yīng)用服務(wù)還可以進(jìn)行安全認(rèn)證、權(quán)限校驗(yàn)、事務(wù)控制、發(fā)送或訂閱領(lǐng)域事件等。

領(lǐng)域?qū)?/p>

領(lǐng)域?qū)又饕獙?shí)現(xiàn)企業(yè)的核心業(yè)務(wù)邏輯,和之前的三層架構(gòu)的 Service 層很像。

領(lǐng)域?qū)赢?dāng)中又包含聚合,聚合里面就帶有聚合根、實(shí)體、值對(duì)象、領(lǐng)域服務(wù)等領(lǐng)域模型中的領(lǐng)域?qū)ο蟆?/p>

領(lǐng)域模型的業(yè)務(wù)邏輯主要通過(guò)實(shí)體和領(lǐng)域服務(wù)來(lái)實(shí)現(xiàn),采用充血模型來(lái)時(shí)先所有與之相關(guān)的業(yè)務(wù)功能。充血模型后面會(huì)解釋。當(dāng)單一實(shí)體(或值對(duì)象)不能實(shí)現(xiàn)時(shí),領(lǐng)域服務(wù)就來(lái)進(jìn)行聚合多個(gè)實(shí)體(或值對(duì)象),來(lái)實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。

基礎(chǔ)層

基礎(chǔ)層為其他各層提供通用的技術(shù)和基礎(chǔ)服務(wù),包括數(shù)據(jù)庫(kù)服務(wù)、消息中間件、對(duì)象存儲(chǔ)、緩存服務(wù)等。

它是封裝了所有的基礎(chǔ)服務(wù),當(dāng)切換基礎(chǔ)組件時(shí),只用稍微修改下基礎(chǔ)服務(wù)就可以了。

比如之前用的對(duì)象文件存儲(chǔ)組件是阿里的,現(xiàn)在想換成騰訊的了,稍微改下基礎(chǔ)服務(wù),切換成騰訊的就可以了,不用去改業(yè)務(wù)邏輯代碼。

這個(gè)就是采用了依賴倒置的原則,通過(guò)解耦來(lái)保持獨(dú)立的核心業(yè)務(wù)邏輯。

傳統(tǒng)三層架構(gòu)轉(zhuǎn) DDD 四層架構(gòu)

傳統(tǒng)的三層架構(gòu)就是 controller->service->model 這種模型,我們的思維習(xí)慣就是基于數(shù)據(jù)庫(kù)的表來(lái)開發(fā)業(yè)務(wù)功能。這種分層架構(gòu)給開發(fā)人員帶來(lái)了便利,但是如果有其他人過(guò)來(lái)看你的代碼,他會(huì)很難從業(yè)務(wù)角度去理解,因?yàn)檫@些代碼都是為操作數(shù)據(jù)庫(kù)的表而寫。

有了 DDD 之后,代碼是面向業(yè)務(wù)功能的,而不是面向數(shù)據(jù)庫(kù)表的。

DDD 分層架構(gòu)將業(yè)務(wù)邏輯層的服務(wù)拆分到了應(yīng)用層和領(lǐng)域?qū)印?yīng)用層快速響應(yīng)前端的變化,領(lǐng)域?qū)訉?shí)現(xiàn)領(lǐng)域模型的能力。

三層架構(gòu)數(shù)據(jù)訪問(wèn)采用 DAO 方式;DDD 分層架構(gòu)的數(shù)據(jù)庫(kù)等基礎(chǔ)資源訪問(wèn),采用了倉(cāng)儲(chǔ)(Repository)設(shè)計(jì)模式,通過(guò)依賴倒置實(shí)現(xiàn)各層對(duì)基礎(chǔ)資源的解耦。

四、DDD 中各種 Object

數(shù)據(jù)持久化對(duì)象 (Persistent Object, PO),與數(shù)據(jù)庫(kù)結(jié)構(gòu)一一映射,它是數(shù)據(jù)持久化過(guò)程中的數(shù)據(jù)載體。

領(lǐng)域?qū)ο?/strong> ( Domain Object, DO),微服務(wù)運(yùn)行時(shí)核心業(yè)務(wù)對(duì)象的載體, DO 一般包括實(shí)體或值對(duì)象。

數(shù)據(jù)傳輸對(duì)象 ( Data Transfer Object, DTO),用于前端應(yīng)用與微服務(wù)應(yīng)用層或者微服務(wù)之間的數(shù)據(jù)組裝和傳輸,是應(yīng)用之間數(shù)據(jù)傳輸?shù)妮d體。

視圖對(duì)象 (View Object, VO),用于封裝展示層指定頁(yè)面或組件的數(shù)據(jù)。

微服務(wù)基礎(chǔ)層 的主要數(shù)據(jù)對(duì)象是PO。在設(shè)計(jì)時(shí),我們需要先建立DO和PO的映射關(guān)系。大多數(shù)情況下DO和PO是一一對(duì)應(yīng)的。但也有DO和PO多對(duì)多的情況。在DO和PO數(shù)據(jù)轉(zhuǎn)換時(shí),需要進(jìn)行數(shù)據(jù)重組。對(duì)于DO對(duì)象較多復(fù)雜的數(shù)據(jù)轉(zhuǎn)換操作,你可以在聚合用工廠模式來(lái)實(shí)現(xiàn)。當(dāng)DO數(shù)據(jù)需要持久化時(shí),先將DO轉(zhuǎn)換為PO對(duì)象,由倉(cāng)儲(chǔ)實(shí)現(xiàn)服務(wù)完成數(shù)據(jù)庫(kù)持久化操作。當(dāng)DO需要構(gòu)建和數(shù)據(jù)初始化時(shí),倉(cāng)儲(chǔ)實(shí)現(xiàn)服務(wù)先從數(shù)據(jù)庫(kù)獲取PO對(duì)象,將PO轉(zhuǎn)換為DO后,完成DO數(shù)據(jù)構(gòu)建和初始化。

領(lǐng)域?qū)?/strong> 主要是DO對(duì)象。DO是實(shí)體和值對(duì)象的數(shù)據(jù)和業(yè)務(wù)行為載體,承載著基礎(chǔ)的核心業(yè)務(wù)邏輯,多個(gè)依賴緊密的DO對(duì)象構(gòu)成聚合。領(lǐng)域?qū)覦O對(duì)象在持久化時(shí)需要轉(zhuǎn)換為PO對(duì)象。

應(yīng)用層 主要對(duì)象有DO對(duì)象,但也可能會(huì)有DTO對(duì)象。應(yīng)用層在進(jìn)行不同聚合的領(lǐng)域服務(wù)編排時(shí),一般建議采用聚合根ID的引用方式,應(yīng)盡量避免不同聚合之間的DO對(duì)象直接引用,避免聚合之間產(chǎn)生依賴。

在涉及跨微服務(wù)的應(yīng)用服務(wù)調(diào)用時(shí),在調(diào)用其他微服務(wù)的應(yīng)用服務(wù)前,DO會(huì)被轉(zhuǎn)換為DTO,完成跨微服務(wù)的DTO數(shù)據(jù)組裝,因此會(huì)有DTO對(duì)象。在前端調(diào)用后端應(yīng)用服務(wù)時(shí),用戶接口層先完成DTO到DO的轉(zhuǎn)換,然后DO作為應(yīng)用服務(wù)的參數(shù),傳導(dǎo)到領(lǐng)域?qū)油瓿蓸I(yè)務(wù)邏輯處理。

用戶接口層主要完成DO和DTO的互轉(zhuǎn),完成微服務(wù)與前端應(yīng)用數(shù)據(jù)交互和轉(zhuǎn)換。facade接口服務(wù)在完成后端應(yīng)用服務(wù)封裝后,會(huì)對(duì)多個(gè)DO對(duì)象進(jìn)行組裝,轉(zhuǎn)換為DTO對(duì)象,向前端應(yīng)用完成數(shù)據(jù)轉(zhuǎn)換和傳輸。facade接口服務(wù)在接收到前端應(yīng)用傳入的DTO后,完成DTO向多個(gè)DO對(duì)象的轉(zhuǎn)換,調(diào)用后端應(yīng)用服務(wù)完成業(yè)務(wù)邏輯處理。前端應(yīng)用主要是VO對(duì)象。展現(xiàn)層使用VO進(jìn)行界面展示,通過(guò)用戶接口層與應(yīng)用層采用DTO對(duì)象進(jìn)行數(shù)據(jù)交互。

五、領(lǐng)域分類

在研究和解決業(yè)務(wù)問(wèn)題時(shí),DDD 會(huì)按照一定的規(guī)則將業(yè)務(wù)領(lǐng)域進(jìn)行細(xì)分,當(dāng)領(lǐng)域細(xì)分到一定的程度后,DDD 會(huì)將問(wèn)題范圍限定在特定的邊界內(nèi),在這個(gè)邊界內(nèi)建立領(lǐng)域模型,進(jìn)而用代碼實(shí)現(xiàn)該領(lǐng)域模型,解決相應(yīng)的業(yè)務(wù)問(wèn)題。簡(jiǎn)言之,DDD 的領(lǐng)域就是這個(gè)邊界內(nèi)要解決的業(yè)務(wù)問(wèn)題域。

領(lǐng)域又可以分為多個(gè)子域,子域又包含核心域、通用域和支撐域。

a600c8e4-4d1e-11ee-a25d-92fbcf53809c.png

核心域 :核心業(yè)務(wù),決定產(chǎn)品和公司核心競(jìng)爭(zhēng)力的子域。

通用域 :同時(shí)被多個(gè)子域使用的通用功能子域。

支撐域 :支持其他子域,非核心域和通用域。

六、實(shí)現(xiàn) DDD 流程

a62982ac-4d1e-11ee-a25d-92fbcf53809c.png

第一步 :事件風(fēng)暴,這里的風(fēng)暴可以理解為頭腦風(fēng)暴,領(lǐng)域?qū)<視?huì)和設(shè)計(jì)、開發(fā)人員一起建立領(lǐng)域模型。

第二步 :對(duì)領(lǐng)域中涉及到的場(chǎng)景(用戶故事)進(jìn)行分析。

第三步 :分析了場(chǎng)景之后,就要定義領(lǐng)域?qū)ο蟆TO(shè)計(jì)實(shí)體、找出聚合根、設(shè)計(jì)值對(duì)象、設(shè)計(jì)領(lǐng)域事件、設(shè)計(jì)領(lǐng)域服務(wù)、設(shè)計(jì)倉(cāng)儲(chǔ)。

第四步 :領(lǐng)域?qū)ο笮枰瑯I(yè)務(wù)邏輯,所以會(huì)形成一個(gè)代碼模型的映射。

第五步 :根據(jù)代碼模型進(jìn)行代碼落地。

六、限界上下文和通用語(yǔ)言

限界上下文

領(lǐng)域邊界就是通過(guò)限界上下文來(lái)定義的。

用來(lái)封裝通用語(yǔ)言和領(lǐng)域?qū)ο螅峁┥舷挛沫h(huán)境,保證在領(lǐng)域之內(nèi)的一些術(shù)語(yǔ)、業(yè)務(wù)相關(guān)對(duì)象等(通用語(yǔ)言)有一個(gè)確切的含義,沒有二義性。

理論上限界上下文就是微服務(wù)的邊界。我們將限界上下文內(nèi)的領(lǐng)域模型映射到微服務(wù),就完成了從問(wèn)題域到軟件的解決方案。

如果不考慮技術(shù)異構(gòu)、團(tuán)隊(duì)溝通等其它外部因素,一個(gè)限界上下文理論上就可以設(shè)計(jì)為一個(gè)微服務(wù)。

邏輯邊界:微服務(wù)內(nèi)聚合之間的邊界是邏輯邊界。它是一個(gè)虛擬的邊界,強(qiáng)調(diào)業(yè)務(wù)的內(nèi)聚,可根據(jù)需要變成物理邊界,也就是說(shuō)聚合也可以獨(dú)立為微服務(wù)。

物理邊界:微服務(wù)之間的邊界是物理邊界。它強(qiáng)調(diào)微服務(wù)部署和運(yùn)行的隔離,關(guān)注微服務(wù)的服務(wù)調(diào)用、容錯(cuò)和運(yùn)行等。

代碼邊界:不同層或者聚合之間代碼目錄的邊界是代碼邊界。它強(qiáng)調(diào)的是代碼之間的隔離,方便架構(gòu)演進(jìn)時(shí)代碼的重組。

通用語(yǔ)言

DDD 分析和設(shè)計(jì)過(guò)程中的每一個(gè)環(huán)節(jié)都需要保證限界上下文內(nèi)術(shù)語(yǔ)的統(tǒng)一,在代碼模型設(shè)計(jì)的時(shí)侯就要建立領(lǐng)域?qū)ο蠛痛a對(duì)象的一一映射,從而保證業(yè)務(wù)模型和代碼模型的一致,實(shí)現(xiàn)業(yè)務(wù)語(yǔ)言與代碼語(yǔ)言的統(tǒng)一。

七、實(shí)體

實(shí)體概念

實(shí)體和值對(duì)象是組成領(lǐng)域模型的基礎(chǔ)單元。

類包含了實(shí)體的屬性和方法,通過(guò)這些方法實(shí)現(xiàn)實(shí)體自身的業(yè)務(wù)邏輯。

實(shí)體以 DO(領(lǐng)域?qū)ο螅┑男问酱嬖冢總€(gè)實(shí)體對(duì)象都有唯一的 ID。字段的值可以變。

實(shí)體是看得到、摸得著的實(shí)實(shí)在在的業(yè)務(wù)對(duì)象,實(shí)體具有業(yè)務(wù)屬性、業(yè)務(wù)行為和業(yè)務(wù)邏輯。

實(shí)體特點(diǎn)

有 ID 標(biāo)識(shí),通過(guò) ID 判斷相等性,ID 在聚合內(nèi)唯一。依附于聚合根,生命周期由聚合根管理。實(shí)體一般會(huì)持久化,但是與數(shù)據(jù)庫(kù)持久化對(duì)象不一定是一對(duì)一的關(guān)系。實(shí)體可以引用聚合內(nèi)的聚合根、實(shí)體和值對(duì)象。

如下代碼所示,Product 屬于商品實(shí)體,有商品唯一 id。Location 屬于值對(duì)象,后面會(huì)講解值對(duì)象。

publicclassProduct{//商品實(shí)體
privatelongid;//值對(duì)象,商品唯一id
privateStringname;//單一屬性值對(duì)象
privateLocationlocation;//屬性值對(duì)象,被實(shí)體引用
}

publicclassLocation{//值對(duì)象,無(wú)主鍵id
privateStringcountry;//值對(duì)象
privateStringprovince;//值對(duì)象
privateStringcity;//值對(duì)象
privateStringstreet;//值對(duì)象
}

實(shí)體類通常采用充血模型。

充血模型和貧血模型的區(qū)別

貧血模型:數(shù)據(jù)和業(yè)務(wù)邏輯分開到不同的類中,比如 Model 類和 Service 類。

充血模型:數(shù)據(jù)和業(yè)務(wù)邏輯封裝在同一個(gè)實(shí)體類中。

八、值對(duì)象

值對(duì)象概念

值對(duì)象描述了領(lǐng)域中的一件東西,這個(gè)東西是不可變的,它將不同的相關(guān)屬性組合成了一個(gè)概念整體。

值對(duì)象是 DDD 領(lǐng)域模型中的一個(gè)基礎(chǔ)對(duì)象,它跟實(shí)體一樣都來(lái)源于事件風(fēng)暴所構(gòu)建的領(lǐng)域模型,都包含了若干個(gè)屬性,它與實(shí)體一起構(gòu)成聚合。

值對(duì)象只是若干個(gè)屬性的集合,只有數(shù)據(jù)初始化操作和有限的不涉及修改數(shù)據(jù)的行為,基本不包含業(yè)務(wù)邏輯。值對(duì)象的屬性集雖然在物理上獨(dú)立出來(lái)了,但在邏輯上它仍然是實(shí)體屬性的一部分,用于描述實(shí)體的特征。

值對(duì)象的特點(diǎn)

無(wú) ID,不可變,無(wú)生命周期,用完就不需要了。值對(duì)象之間通過(guò)屬性值判斷相等性。核心本質(zhì)是值,是一組概念完整的屬性組成的集合,用于描述實(shí)體的狀態(tài)和特征,值對(duì)象盡量只引用值對(duì)象。

九、聚合和聚合根

聚合

聚合就是由業(yè)務(wù)和邏輯緊密關(guān)聯(lián)的實(shí)體和值對(duì)象組合而成。

聚合是數(shù)據(jù)修改和持久化的基本單元,每一個(gè)聚合對(duì)應(yīng)一個(gè)倉(cāng)儲(chǔ),實(shí)現(xiàn)數(shù)據(jù)的持久化。

聚合有一個(gè)聚合根和上下文便捷,根據(jù)業(yè)務(wù)單一職責(zé)和高內(nèi)聚原則,定義了聚合內(nèi)部應(yīng)該包含哪些實(shí)體和值對(duì)象,而聚合之間的邊界是松耦合的。

聚合屬于 DDD 領(lǐng)域?qū)樱I(lǐng)域?qū)影鄠€(gè)聚合,共同實(shí)現(xiàn)核心業(yè)務(wù)邏輯。

聚合內(nèi)的實(shí)體以充血模型實(shí)現(xiàn)個(gè)體業(yè)務(wù)能力,以及業(yè)務(wù)邏輯的高內(nèi)聚。

跨多個(gè)實(shí)體的業(yè)務(wù)邏輯通過(guò)領(lǐng)域服務(wù)來(lái)實(shí)現(xiàn),跨多個(gè)聚合的業(yè)務(wù)邏輯通過(guò)應(yīng)用服務(wù)來(lái)實(shí)現(xiàn)。

特點(diǎn) :高內(nèi)聚、低耦合,它是領(lǐng)域模型中最底層的邊界,可以作為拆分微服務(wù)的最小單位,但是不建議對(duì)微服務(wù)過(guò)度拆分。一個(gè)聚合可以作為一個(gè)微服務(wù),以滿足版本的高頻發(fā)布和極致的彈性伸縮能力。一個(gè)微服務(wù)也可以包含多個(gè)聚合,可以進(jìn)行拆分和組合。

聚合根

聚合根是為了避免由于復(fù)雜數(shù)據(jù)模型缺少統(tǒng)一的業(yè)務(wù)規(guī)則控制,從而導(dǎo)致聚合、實(shí)體之間數(shù)據(jù)不一致性的問(wèn)題。

聚合可以比作組織,聚合根就是這個(gè)組織的負(fù)責(zé)人。

外部對(duì)象不能直接訪問(wèn)聚合內(nèi)實(shí)體,需要先訪問(wèn)聚合根,再導(dǎo)航到聚合內(nèi)部實(shí)體。

特點(diǎn) :聚合根是實(shí)體,有實(shí)體的特點(diǎn),具有全局唯一標(biāo)識(shí),有獨(dú)立的生命周期。一個(gè)聚合只有一個(gè)聚合根,聚合根在聚合內(nèi)對(duì)實(shí)體和值對(duì)象采用直接對(duì)象引用的方式進(jìn)行組織和協(xié)調(diào),聚合根和聚合根之間通過(guò) ID 關(guān)聯(lián)的方式實(shí)現(xiàn)聚合之間的協(xié)同。

十、領(lǐng)域事件

領(lǐng)域事件用來(lái)表示領(lǐng)域中發(fā)生的事件。一個(gè)領(lǐng)域事件將導(dǎo)致進(jìn)一步的業(yè)務(wù)操作,在實(shí)現(xiàn)業(yè)務(wù)解耦的同時(shí),有助于形成完成的業(yè)務(wù)閉環(huán)。

領(lǐng)域事件驅(qū)動(dòng)設(shè)計(jì)可以切斷領(lǐng)域模型之間的強(qiáng)依賴關(guān)系,事件發(fā)布完成后,發(fā)布方不必關(guān)心后續(xù)訂閱方事件處理是否成功,可以實(shí)現(xiàn)領(lǐng)域模型的解耦,維護(hù)領(lǐng)域模型的獨(dú)立性和數(shù)據(jù)的一致性。微服務(wù)之間的數(shù)據(jù)不必要求強(qiáng)一致性,而是基于事件的最終一致性。

領(lǐng)域事件的執(zhí)行需要一系列的組件和技術(shù)來(lái)支撐:事件的構(gòu)建和發(fā)布、事件數(shù)據(jù)持久化、事件總線、消息中間件、事件接收和處理。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 轉(zhuǎn)換器
    +關(guān)注

    關(guān)注

    27

    文章

    8742

    瀏覽量

    147767
  • Web服務(wù)器
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    24454
  • 驅(qū)動(dòng)設(shè)計(jì)

    關(guān)注

    1

    文章

    111

    瀏覽量

    15301
  • 解耦控制
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    10227

原文標(biāo)題:「查缺補(bǔ)漏」,DDD 核心概念梳理

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ddd

    誰(shuí)有java版的OA源碼
    發(fā)表于 07-31 10:46

    真心求助 為什么我的程序生成時(shí)鐘后會(huì)死機(jī)啊

    程序目的是血型配對(duì)指示器,匹配符合要求T燈亮不符合要求F燈亮entity ddd is Port ( a : inSTD_LOGIC_VECTOR (3 downto 0);b
    發(fā)表于 12-20 18:20

    一文幫你梳理Cortex與ARMv8等基礎(chǔ)概念

    到底什么是Cortex、ARMv8、arm架構(gòu)、ARM指令集、soc?一文幫你梳理基礎(chǔ)概念【科普】1. 從0開始學(xué)ARM-安裝Keil MDK uVision集成開發(fā)環(huán)境
    發(fā)表于 12-14 08:20

    黑客攻防入門與進(jìn)階ddd

    黑客攻防入門與進(jìn)階ddd黑客攻防入門與進(jìn)階ddd
    發(fā)表于 02-23 15:45 ?9次下載

    DDD_RH137K_FAB地段10008104.1 W7修訂版2

    DDD_RH137K_FAB地段10008104.1 W7修訂版2
    發(fā)表于 05-24 16:18 ?0次下載
    <b class='flag-5'>DDD</b>_RH137K_FAB地段10008104.1 W7修訂版2

    "Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--轉(zhuǎn)"

    "Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--轉(zhuǎn)"
    發(fā)表于 12-01 18:06 ?6次下載
    "Scalable, Distributed Systems Using Akka, Spring Boot, <b class='flag-5'>DDD</b>, and Java--轉(zhuǎn)"

    Kafka的核心概念

    Kafka 是主流的消息流系統(tǒng),其中的概念還是比較多的,下面通過(guò)圖示的方式來(lái)梳理一下 Kafka 的核心概念,以便在我們的頭腦中有一個(gè)清晰的認(rèn)識(shí)。
    的頭像 發(fā)表于 06-20 14:24 ?987次閱讀

    為什么需要DDDDDD怎么解決問(wèn)題?

    它有三個(gè)關(guān)鍵詞:領(lǐng)域,驅(qū)動(dòng),設(shè)計(jì)。領(lǐng)域,是要探索業(yè)務(wù)的邊界;驅(qū)動(dòng),表示前者是后者的決定性因素;設(shè)計(jì),包括產(chǎn)品設(shè)計(jì),UIUE設(shè)計(jì),軟件設(shè)計(jì)。
    的頭像 發(fā)表于 01-30 10:19 ?1664次閱讀

    為什么要用洋蔥架構(gòu)?洋蔥架構(gòu)層是如何構(gòu)成的

    領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domain-driven design,DDD)是一種為復(fù)雜需求開發(fā)軟件的方法,它將軟件的實(shí)現(xiàn)與不斷發(fā)展的核心業(yè)務(wù)概念模型緊密地結(jié)合在一起。
    的頭像 發(fā)表于 02-02 11:35 ?1083次閱讀

    用好DDD必須先過(guò)Spring Data這關(guān)

    DDD 是一種領(lǐng)域驅(qū)動(dòng)的設(shè)計(jì)方法,旨在通過(guò)建立對(duì)領(lǐng)域模型的清晰理解來(lái)解決業(yè)務(wù)問(wèn)題。和事務(wù)腳本不同,DDD 使用面向?qū)ο笤O(shè)計(jì)來(lái)應(yīng)對(duì)復(fù)雜的業(yè)務(wù)場(chǎng)景。
    的頭像 發(fā)表于 03-07 09:38 ?2174次閱讀

    一文理解DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)

    2004年Eric Evans 發(fā)表Domain-Driven Design –Tackling Complexity in the Heart of Software (領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)),簡(jiǎn)稱Evans DDD
    的頭像 發(fā)表于 05-25 14:21 ?988次閱讀
    一文理解<b class='flag-5'>DDD</b>領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)

    DDD驅(qū)動(dòng)如何設(shè)計(jì)?如何進(jìn)行領(lǐng)域建模?

    DDD是Eric Evans在2003年出版的《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對(duì)之道》(Domain-Driven Design: Tackling Complexity in the Heart
    的頭像 發(fā)表于 07-18 14:11 ?1185次閱讀
    <b class='flag-5'>DDD</b>驅(qū)動(dòng)如何設(shè)計(jì)?如何進(jìn)行領(lǐng)域建模?

    談?wù)労蠖思軜?gòu)的演進(jìn)過(guò)程:N-Layered和DDD架構(gòu)介紹

    在本文中,我們討論了 N-layered、DDD、六邊形、洋蔥和清潔架構(gòu)。這些只是眾多存在的架構(gòu)中的一部分,是一些比較出名的架構(gòu)。你可能還聽說(shuō)過(guò) BCE、DCI 等。
    發(fā)表于 08-16 10:08 ?661次閱讀
    談?wù)労蠖思軜?gòu)的演進(jìn)過(guò)程:N-Layered和<b class='flag-5'>DDD</b>架構(gòu)介紹

    DDD學(xué)習(xí)與感悟——向屎山?jīng)_鋒

    軟件系統(tǒng)是通過(guò)軟件開發(fā)來(lái)解決某一個(gè)業(yè)務(wù)領(lǐng)域或問(wèn)題單元而產(chǎn)生的一個(gè)交付物。而通過(guò)軟件設(shè)計(jì)可以幫助我們開發(fā)出更加健壯的軟件系統(tǒng)。因此,軟件設(shè)計(jì)是從業(yè)務(wù)領(lǐng)域到軟件開發(fā)之間的橋梁。而DDD是軟件設(shè)計(jì)中的其中
    的頭像 發(fā)表于 09-24 13:31 ?263次閱讀
    <b class='flag-5'>DDD</b>學(xué)習(xí)與感悟——向屎山?jīng)_鋒

    在DVEVM上通過(guò)ddd運(yùn)行Demo

    電子發(fā)燒友網(wǎng)站提供《在DVEVM上通過(guò)ddd運(yùn)行Demo.pdf》資料免費(fèi)下載
    發(fā)表于 10-15 10:05 ?0次下載
    在DVEVM上通過(guò)<b class='flag-5'>ddd</b>運(yùn)行Demo
    主站蜘蛛池模板: 羞羞答答dc视频 | jlzzzjizzzjlzzz亚洲 | 色综合久久88一加勒比 | 成人天堂资源WWW在线 | 精品四虎国产在免费观看 | 国产高清免费视频免费观看 | 一二三四在线视频社区8 | a级毛片黄免费a级毛片 | 婷婷午夜影院 | 亚洲精品人成电影网 | 天天看学生视频 | 国产福利一区二区精品 | 国产综合91| 三级黄色在线看 | 久久久久亚洲精品影视 | 久久夜色噜噜噜亚洲AV0000 | 国产免费啪嗒啪嗒视频看看 | 中文字幕AV在线一二三区 | 友田真希息与子中文字幕 | 狠狠色欧美亚洲狠狠色www | 2020精品国产视 | 清晨紧湿爱运动h高h | 九九视频在线观看视频6 | 久久人妻AV一区二区软件 | 97国产蝌蚪视频在线观看 | a4you销魂gogo人体 | 纯肉宠文高h一对一 | 免费看的一级毛片 | 体内精69xxxxxx喷潮 | 日本精品卡一卡2卡3卡四卡三卡 | 一区二区三区毛AAAA片特级 | 亚洲精品久久7777777 | 日本久久久久久久做爰片日本 | 91精品国产高清久久久久久 | 日本激情网址 | 好男人资源免费观看1 | 肉肉描写很细致的黄文 | 国产精品亚洲欧美一区麻豆 | 国产成人无码一区AV在线观看 | 婷婷亚洲五月色综合久久 | 年轻夫妇韩剧中文版免费观看 |