成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)中應(yīng)該避免的十件事

譯文 精選
開發(fā) 前端
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)是軟件開發(fā)中的一種重要戰(zhàn)略方法。本文將探討在DDD中應(yīng)該避免的10件事,并舉例來說明這些陷阱。

譯者 | 李睿

審校 | 重樓

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)是軟件開發(fā)的一種重要戰(zhàn)略方法。它涉及對業(yè)務(wù)領(lǐng)域的深入理解和建模,尤其適用于具有復(fù)雜業(yè)務(wù)規(guī)則、流程和交互的復(fù)雜領(lǐng)域。然而,有效地實(shí)現(xiàn)DDD需要紀(jì)律性、領(lǐng)域的深刻理解,以及避免可能導(dǎo)致次優(yōu)設(shè)計(jì)和技術(shù)債務(wù)的常見陷阱。本文中將探討在DDD中應(yīng)該避免的10件事,并舉例說明這些陷阱。

1.過于關(guān)注技術(shù)模式

(1)示例場景

團(tuán)隊(duì)在開始開發(fā)項(xiàng)目時(shí),在還沒有完全理解業(yè)務(wù)領(lǐng)域的情況下,就過度創(chuàng)建了存儲(chǔ)庫、聚合和值對象。例如,他們開發(fā)一個(gè)復(fù)雜的存儲(chǔ)庫來管理客戶實(shí)體,而不了解客戶在業(yè)務(wù)中是如何表示和利用的。因此,這個(gè)存儲(chǔ)庫包含了許多與領(lǐng)域的實(shí)際用例和需求不一致的不必要的方法。

(2)避免技巧

DDD的主要點(diǎn)應(yīng)該是理解領(lǐng)域這涉及一個(gè)協(xié)作過程,團(tuán)隊(duì)與領(lǐng)域?qū)<揖o密合作,以建立對基本業(yè)務(wù)概念的共同理解和共同語言。像存儲(chǔ)庫和聚合這樣的技術(shù)模式應(yīng)該自然地從領(lǐng)域模型中出現(xiàn),而不是在開始時(shí)過早地實(shí)現(xiàn)或過分強(qiáng)調(diào)。

2.過度設(shè)計(jì)模型

(1)示例場景

團(tuán)隊(duì)嚴(yán)格遵守DDD原則,創(chuàng)建了一個(gè)詳細(xì)的領(lǐng)域模型,該模型包含每個(gè)可能的領(lǐng)域概念的單獨(dú)類。例如,他們?yōu)椤翱蛻裘Q”(CustomerName)、“客戶郵箱”(CustomerEmail)和“客戶地址”(CustomerAddress)創(chuàng)建了單獨(dú)的類,而這些本來可以組合成一個(gè)更直接的“客戶”(Customer)值對象。結(jié)果模型變得過于復(fù)雜,難以維護(hù),幾乎沒有附加價(jià)值。

(2)避免技巧

為了防止?jié)撛诘膯栴},團(tuán)隊(duì)有責(zé)任維護(hù)一個(gè)簡單且準(zhǔn)確反映領(lǐng)域的領(lǐng)域模型。這種謹(jǐn)慎的方法對于專注于對具有戰(zhàn)略重要性的領(lǐng)域組件進(jìn)行建模以及簡化或排除不太重要的元素至關(guān)重要。需要記住,DDD主要關(guān)注的是戰(zhàn)略設(shè)計(jì),而不是通過不必要的復(fù)雜性來不必要地使領(lǐng)域模型復(fù)雜化。

3.忽視通用的語言

(1)示例場景

在協(xié)作環(huán)境中,開發(fā)人員和領(lǐng)域?qū)<沂褂貌煌募夹g(shù)詞匯是很常見的。例如,雖然領(lǐng)域?qū)<彝ǔJ褂谩安少徲唵巍边@一術(shù)語,但開發(fā)人員可能會(huì)在他們的代碼庫中使用OrderEntity。這種術(shù)語差異可能導(dǎo)致各種挑戰(zhàn),包括誤解、處理不當(dāng)?shù)膶?shí)現(xiàn),以及代碼與具體業(yè)務(wù)需求之間的同步需求。這些差異可能會(huì)阻礙有效溝通,并妨礙將業(yè)務(wù)邏輯準(zhǔn)確轉(zhuǎn)換為技術(shù)實(shí)現(xiàn)。因此,確保開發(fā)人員和領(lǐng)域?qū)<抑g對術(shù)語有共同的理解,對于促進(jìn)有效協(xié)作并使技術(shù)解決方案與業(yè)務(wù)需求保持一致至關(guān)重要。

(2)避免技巧

建立和維護(hù)一種通用語言對于確保項(xiàng)目各個(gè)方面的清晰溝通和理解至關(guān)重要。這個(gè)過程需要與領(lǐng)域?qū)<颐芮泻献鳎蚤_發(fā)和維護(hù)一致的詞匯表。語言應(yīng)該統(tǒng)一地應(yīng)用于代碼、文檔、對話和所有形式的交流中。通過這樣做,可以防止誤解,并保證模型準(zhǔn)確地反映業(yè)務(wù)需求。這種方法有助于所有利益相關(guān)者保持一致,并促進(jìn)了整個(gè)項(xiàng)目生命周期的凝聚力。

4.對有限語境的誤解

(1)示例場景

當(dāng)團(tuán)隊(duì)試圖在例如“賬單”(Billing)、“客戶服務(wù)”(Customer Service)和“營銷” Marketing)各種子域中使用單個(gè)“客戶”實(shí)體時(shí),會(huì)導(dǎo)致應(yīng)用程序不同部分之間的歧義和不必要的互連。例如,在“賬單”語境中對“客戶”實(shí)體所做的修改可能會(huì)無意中影響“營銷”語境,從而導(dǎo)致不可預(yù)見的行為和數(shù)據(jù)差異。

(2)避免技巧

在定義有界語境時(shí),明確劃分具有不同職責(zé)的領(lǐng)域區(qū)域至關(guān)重要。每個(gè)有界語境都應(yīng)該擁有自己的模型和明確定義的邊界。為了維護(hù)每個(gè)語境模型的完整性,必須通過定義良好的接口或反腐敗層促進(jìn)語境之間的集成。這些措施確保保留每個(gè)有界語境的職責(zé)和完整性。

5.不符合商業(yè)戰(zhàn)略

(1)示例場景

團(tuán)隊(duì)對DDD的采用純粹是技術(shù)性的,他們專注于對領(lǐng)域所有方面的建模,而沒有考慮業(yè)務(wù)戰(zhàn)略。他們投入了大量精力來建模領(lǐng)域的周邊元素,例如“員工出勤”和“辦公用品管理”,而忽了提供最大價(jià)值的核心業(yè)務(wù)流程:“訂單履行”。 由于采用這種方法,生成的模型很復(fù)雜,但需要與業(yè)務(wù)的戰(zhàn)略目標(biāo)保持一致。

(2)避免技巧

利用DDD深入分析和專注于領(lǐng)域中最重要和最有影響力的部分是至關(guān)重要的。確定向業(yè)務(wù)交付最高價(jià)值的方面,并確保建模工作與業(yè)務(wù)的總體優(yōu)先事項(xiàng)和戰(zhàn)略目標(biāo)緊密結(jié)合。積極與關(guān)鍵業(yè)務(wù)利益相關(guān)者合作,以全面了解對他們而言最具價(jià)值的領(lǐng)域,并在建模工作中優(yōu)先考慮這些領(lǐng)域。這種方法將最佳地反映業(yè)務(wù)的關(guān)鍵需求,并有助于成功實(shí)現(xiàn)戰(zhàn)略目標(biāo)。

6.過度使用實(shí)體而不是值對象

(1)示例場景

許多軟件開發(fā)人員將“貨幣”(Currency)概念化為具有唯一標(biāo)識(shí)符的實(shí)體本質(zhì)上將其視為獨(dú)立對象。但是,將“貨幣”視為由其屬性(例如“美元”或“歐元”)定義的值對象可能更有效。通過堅(jiān)持使用前一種方法,團(tuán)隊(duì)無意中引入了不必要的復(fù)雜性,例如需要管理“貨幣”實(shí)體的生命周期、狀態(tài)和身份。這不必要地使代碼庫變得復(fù)雜,使其更加笨重并增加了其冗余性。

(2)避免技巧

在設(shè)計(jì)軟件時(shí),盡可能地利用值對象是有益的,特別是對于保持不變且不需要唯一標(biāo)識(shí)的類型和對象。值對象是有利的,因?yàn)樗鼈兏子诠芾砗皖A(yù)測,通常導(dǎo)致代碼更易于維護(hù)。這些對象可以有效地表示特定于領(lǐng)域的值,例如日期、貨幣值、測量值和其他基本概念。

7.忽略聚合及其邊界

(1)示例場景

在DDD的語境中,聚合表示作為數(shù)據(jù)更改的單個(gè)單元的相關(guān)對象的集群或組。當(dāng)團(tuán)隊(duì)將“產(chǎn)品”(Product)建模為獨(dú)立實(shí)體時(shí),他們可能會(huì)忽略其聚合邊界,從而允許多個(gè)服務(wù)獨(dú)立地修改它。這可能導(dǎo)致不同服務(wù)對同一“產(chǎn)品”的更新沖突,從而導(dǎo)致數(shù)據(jù)不一致和違反業(yè)務(wù)規(guī)則。定義和尊重聚合邊界對于維護(hù)數(shù)據(jù)完整性和確保跨不同系統(tǒng)部分的一致性至關(guān)重要。

(2)避免技巧

聚合是DDD中的一個(gè)基本概念,它涉及將一組相關(guān)對象視為數(shù)據(jù)更改的單元。聚合包含一個(gè)特定的對象,稱為聚合根,它作為聚合內(nèi)所有修改的入口點(diǎn)。在聚合中封裝相關(guān)對象并通過聚合根進(jìn)行修改,可以更容易地執(zhí)行業(yè)務(wù)規(guī)則并維護(hù)數(shù)據(jù)一致性和完整性。這種方法有助于確保所有操作和更改都發(fā)生在聚合的定義邊界內(nèi),從而可以更好地控制和管理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。

8.未能有效地使用域事件

(1)示例場景

團(tuán)隊(duì)忽略域事件并直接調(diào)用服務(wù)。這導(dǎo)致他們的系統(tǒng)變得緊密耦合,增加了不同系統(tǒng)部分之間的依賴關(guān)系。因此,修改或擴(kuò)展系統(tǒng)變得更具挑戰(zhàn)性,因?yàn)橐粋€(gè)服務(wù)中的任何更改都會(huì)直接影響其他服務(wù),從而導(dǎo)致更改的多米諾骨牌效應(yīng),并使系統(tǒng)更加脆弱。

另一方面,在另一種情況下,其他的一個(gè)團(tuán)隊(duì)過度使用領(lǐng)域事件,為每一個(gè)小的變化都發(fā)出一個(gè)事件,例如“客戶創(chuàng)建(CustomerCreated)、客戶更新”(CustomerUpdated客戶刪除”(CustomerDeleted),即使系統(tǒng)的其他部分并不需要這些事件。這將導(dǎo)致生成和處理過多的事件,從而導(dǎo)致性能下降、復(fù)雜性增加和不必要的資源消耗。系統(tǒng)中充斥著毫無實(shí)際意義的事件,導(dǎo)致事件疲勞,使識(shí)別和響應(yīng)關(guān)鍵事件變得更加困難。

(2)避免技巧

在開發(fā)系統(tǒng)時(shí),利用領(lǐng)域事件來捕獲領(lǐng)域內(nèi)的重大變化是至關(guān)重要的。這些事件應(yīng)該經(jīng)過精心設(shè)計(jì),以服務(wù)于明確的目的,并在系統(tǒng)內(nèi)傳達(dá)有意義的狀態(tài)變化。通過使用領(lǐng)域事件,可以有效地解耦系統(tǒng)的各個(gè)部分,從而促進(jìn)系統(tǒng)的可擴(kuò)展性和改進(jìn)可維護(hù)性。

然而,謹(jǐn)慎行事并避免過度使用領(lǐng)域事件是至關(guān)重要的,因?yàn)檫@樣做可能導(dǎo)致不必要的復(fù)雜性和潛在的性能問題。至關(guān)重要的是要取得平衡,只使用真正有益的領(lǐng)域事件,而不是不加選擇地將其納入整個(gè)系統(tǒng)。這種方法最終將有助于建立一個(gè)更加精簡和可管理的系統(tǒng)架構(gòu)。

9.忽視了與領(lǐng)域?qū)<液献鞯闹匾?/span>

(1)示例場景

開發(fā)團(tuán)隊(duì)在沒有征求貸款經(jīng)理或該領(lǐng)域其他專家的意見的情況下,開始創(chuàng)建“貸款審批”流程。因此,該模型省略了關(guān)鍵的業(yè)務(wù)規(guī)則,包括特定的風(fēng)險(xiǎn)評估標(biāo)準(zhǔn)、驗(yàn)證步驟和監(jiān)管要求。這一重大疏忽導(dǎo)致軟件解決方案需要與業(yè)務(wù)需求保持一致,導(dǎo)致其被利益相關(guān)者拒絕。

(2)避免技巧

在設(shè)計(jì)和開發(fā)過程的每個(gè)階段與領(lǐng)域?qū)<医⒚芮泻献魇侵陵P(guān)重要的。定期與他們接觸以確認(rèn)對該領(lǐng)域的理解是準(zhǔn)確的很重要,可以讓領(lǐng)域?qū)<覅⑴c討論、設(shè)計(jì)會(huì)議和模型評審,以收集他們具有價(jià)值的見解。諸如事件風(fēng)暴和領(lǐng)域故事講述等技術(shù)可以促進(jìn)協(xié)作建模,確保模型忠實(shí)地代表領(lǐng)域。

10.將DDD視為靈丹妙藥

(1)示例場景

團(tuán)隊(duì)錯(cuò)誤地認(rèn)為DDD普遍適用于所有軟件項(xiàng)目,而無論領(lǐng)域的復(fù)雜性如何。這導(dǎo)致他們將DDD原則應(yīng)用于簡單的CRUD應(yīng)用程序,例如“待辦事項(xiàng)列表”或“聯(lián)系人管理”系統(tǒng)。其結(jié)果是,代碼庫過于復(fù)雜,難以維護(hù),開發(fā)成本高昂,遠(yuǎn)遠(yuǎn)超過了項(xiàng)目的需求。

(2)避免技巧

DDD最適合以復(fù)雜性著稱的領(lǐng)域,特別是那些以復(fù)雜的業(yè)務(wù)規(guī)則和流程為特征的領(lǐng)域。在如此復(fù)雜的領(lǐng)域中,業(yè)務(wù)團(tuán)隊(duì)和技術(shù)團(tuán)隊(duì)之間的緊密結(jié)合對于成功至關(guān)重要。相比之下,DDD可能并不最適合簡單的應(yīng)用程序或領(lǐng)域,在這些領(lǐng)域,可以采用更直接的方法。仔細(xì)評估領(lǐng)域的復(fù)雜性和項(xiàng)目的具體要求以確定最合適的方法非常重要。

結(jié)論

DDD是一種強(qiáng)大的軟件開發(fā)方法,旨在構(gòu)建與復(fù)雜業(yè)務(wù)領(lǐng)域相匹配的軟件。然而,就像任何強(qiáng)大的工具一樣,必須明智地使用。通過避免這10個(gè)常見陷阱,可以充分利用DDD的潛力,創(chuàng)建出準(zhǔn)確反映并支持業(yè)務(wù)目標(biāo)的軟件。需要記住,DDD不僅僅是關(guān)于模式和實(shí)踐;它關(guān)促進(jìn)協(xié)作、建立對領(lǐng)域的共同理解,以及構(gòu)建能夠提供真正戰(zhàn)略價(jià)值的解決方案,這種價(jià)值正是團(tuán)隊(duì)協(xié)同努力的重要貢獻(xiàn)。

通過專注于理解領(lǐng)域、避免過度設(shè)計(jì)、與業(yè)務(wù)戰(zhàn)略保持一致以及保持清晰一致的語言,團(tuán)隊(duì)可以創(chuàng)建不僅在技術(shù)上合理,而且與業(yè)務(wù)需求高度一致的模型。

原文標(biāo)題:10 Things To Avoid in Domain-Driven Design (DDD),作者:Reza Ganji

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2020-08-10 15:30:24

XDR網(wǎng)絡(luò)安全網(wǎng)絡(luò)威脅

2025-04-10 07:00:00

GenAIChatGPT人工智能

2013-01-21 09:58:41

vSphere網(wǎng)絡(luò)設(shè)置VMware vSph

2012-04-27 09:24:39

Google Driv云存儲(chǔ)

2010-08-09 13:13:00

Flex程序員

2009-05-26 09:48:34

2022-10-09 16:35:08

Redis開發(fā)集群

2025-02-10 08:59:54

2009-04-24 08:17:15

MySpaceCEO社交網(wǎng)站

2013-02-25 10:24:21

Hyper-V服務(wù)器虛擬化

2010-02-25 11:02:29

JavaScript

2016-12-26 11:34:23

2022-10-28 08:37:03

UbuntuLinux

2011-05-18 09:31:14

Windows 7

2009-06-26 09:36:06

2022-11-28 14:43:15

2015-10-26 16:34:08

安裝Ubuntu 15.1Linux

2017-05-02 11:36:00

Java

2012-09-29 10:56:37

Google技術(shù)先驅(qū)

2023-05-18 15:50:59

Arch Linux命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人欧美一区二区三区黑人孕妇 | 国产一区二区三区四区五区3d | 欧美性猛交一区二区三区精品 | 国产精品日日摸夜夜添夜夜av | 一区二区在线不卡 | 国产视频精品在线 | www.久| 天天宗合网 | 午夜小视频在线观看 | 欧美人人 | 国产精品a久久久久 | 尤物在线 | 久久一| 亚洲精品欧美一区二区三区 | 精久久久 | 久久久久久久久久久蜜桃 | 中文字幕第九页 | 精品国产一区二区三区免费 | 国产一级在线 | 91精品国产综合久久久动漫日韩 | 国产精品福利一区二区三区 | 精品av久久久久电影 | 久久精品国产一区二区三区 | 91就要激情| 亚洲精品视频在线看 | 亚洲视频免费在线播放 | 一区二区在线 | 国产精品久久久久久久久久久免费看 | 伊人精品在线 | 91久久| 91精品国产一区二区三区 | 色爱av| 91视频大全 | 超碰最新在线 | 日韩欧美精品在线 | 国产日韩精品一区 | 精品一级| 亚洲欧美在线一区 | 中国毛片免费 | 亚洲精选一区 | 五月天国产 |