偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

譯者 | 李睿

審校 | 重樓

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)是軟件開(kāi)發(fā)的一種重要戰(zhàn)略方法。它涉及對(duì)業(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ù)的常見(jiàn)陷阱。本文中將探討在DDD中應(yīng)該避免的10件事,并舉例說(shuō)明這些陷阱。

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

(1)示例場(chǎng)景

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

(2)避免技巧

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

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

(1)示例場(chǎng)景

團(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ú)的類,而這些本來(lái)可以組合成一個(gè)更直接的“客戶”(Customer)值對(duì)象。結(jié)果模型變得過(guò)于復(fù)雜,難以維護(hù),幾乎沒(méi)有附加價(jià)值。

(2)避免技巧

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

3.忽視通用的語(yǔ)言

(1)示例場(chǎng)景

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

(2)避免技巧

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

4.對(duì)有限語(yǔ)境的誤解

(1)示例場(chǎng)景

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

(2)避免技巧

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

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

(1)示例場(chǎng)景

團(tuán)隊(duì)對(duì)DDD的采用純粹是技術(shù)性的,他們專注于對(duì)領(lǐng)域所有方面的建模,而沒(méi)有考慮業(yè)務(wù)戰(zhàn)略。他們投入了大量精力來(lái)建模領(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)者合作,以全面了解對(duì)他們而言最具價(jià)值的領(lǐng)域,并在建模工作中優(yōu)先考慮這些領(lǐng)域。這種方法將最佳地反映業(yè)務(wù)的關(guān)鍵需求,并有助于成功實(shí)現(xiàn)戰(zhàn)略目標(biāo)。

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

(1)示例場(chǎng)景

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

(2)避免技巧

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

7.忽略聚合及其邊界

(1)示例場(chǎng)景

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

(2)避免技巧

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

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

(1)示例場(chǎng)景

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

(2)避免技巧

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

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

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

(1)示例場(chǎng)景

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

(2)避免技巧

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

10.將DDD視為靈丹妙藥

(1)示例場(chǎng)景

團(tuán)隊(duì)錯(cuò)誤地認(rèn)為DDD普遍適用于所有軟件項(xiàng)目,而無(wú)論領(lǐng)域的復(fù)雜性如何。這導(dǎo)致他們將DDD原則應(yīng)用于簡(jiǎn)單的CRUD應(yīng)用程序,例如“待辦事項(xiàng)列表”或“聯(lián)系人管理”系統(tǒng)。其結(jié)果是,代碼庫(kù)過(guò)于復(fù)雜,難以維護(hù),開(kāi)發(fā)成本高昂,遠(yuǎn)遠(yuǎn)超過(guò)了項(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é)合對(duì)于成功至關(guān)重要。相比之下,DDD可能并不最適合簡(jiǎn)單的應(yīng)用程序或領(lǐng)域,在這些領(lǐng)域,可以采用更直接的方法。仔細(xì)評(píng)估領(lǐng)域的復(fù)雜性和項(xiàng)目的具體要求以確定最合適的方法非常重要。

結(jié)論

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

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

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

責(zé)任編輯:華軒 來(lái)源: 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ǔ)

2022-10-09 16:35:08

Redis開(kāi)發(fā)集群

2010-08-09 13:13:00

Flex程序員

2009-05-26 09:48:34

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)