日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

领域驱动设计的简略设计步骤

發(fā)布時(shí)間:2025/3/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 领域驱动设计的简略设计步骤 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先,需要根據(jù)需求建立一個(gè)初步的領(lǐng)域模型,至少要識(shí)別出領(lǐng)域?qū)ο蠛皖I(lǐng)域?qū)ο笾g的關(guān)系(可以是沒(méi)有方向的關(guān)聯(lián)關(guān)系)。這些領(lǐng)域?qū)ο笾粦?yīng)該放在領(lǐng)域?qū)又小H绻嬖趹?yīng)用職責(zé),可以識(shí)別出應(yīng)用類(lèi)。它們用來(lái)協(xié)調(diào)領(lǐng)域?qū)ο?#xff0c;只負(fù)責(zé)提出問(wèn)題,本身并不解決問(wèn)題。解決問(wèn)題是領(lǐng)域?qū)拥穆氊?zé)。這些應(yīng)用類(lèi)將被放在應(yīng)用層中。

接下來(lái)分析領(lǐng)域模型,識(shí)別出實(shí)體對(duì)象和值對(duì)象。如果是實(shí)體對(duì)象,最好判斷其標(biāo)識(shí)的組成與生成方式。然后,再細(xì)致地分析關(guān)聯(lián)關(guān)系,確定關(guān)聯(lián)關(guān)系的游歷方向。要注意幾種特殊的關(guān)聯(lián)關(guān)系。如果是多對(duì)多,則要看是否可以轉(zhuǎn)換為有限定的一對(duì)多。對(duì)于循環(huán)引用關(guān)系,則需要特別注意。可以考慮利用查詢(xún)(利用資源庫(kù))來(lái)解除其中一方的引用關(guān)系。如果要繼續(xù)維護(hù)這種循環(huán)引用,需要考慮參與循環(huán)引用的多個(gè)對(duì)象之間的不變量。如果是雙向關(guān)聯(lián),很可能是組成聚合的兩個(gè)對(duì)象,但要判斷哪個(gè)是聚合根。此時(shí),彼此的構(gòu)造函數(shù)是雙重委派的,但其中非根對(duì)象的創(chuàng)建應(yīng)該封裝在根對(duì)象的構(gòu)造函數(shù)(或者工廠(chǎng))中。

之后,是劃分聚合的邊界,找到聚合根。放在聚合中的實(shí)體對(duì)象通常存在兩個(gè)特點(diǎn):1)不需要對(duì)它進(jìn)行全局訪(fǎng)問(wèn);2)它與聚合根有非常緊密的聯(lián)系。如果無(wú)法確定聚合根,且又不是某個(gè)聚合范圍中的對(duì)象,可以暫時(shí)當(dāng)作聚合根對(duì)象來(lái)處理。

需要考慮資源庫(kù)(Repository)對(duì)象了。通常,我們只需要對(duì)聚合根考慮資源庫(kù)。主要是從查詢(xún)的角度來(lái)判斷資源庫(kù)(這里存在查詢(xún)方法的定義,需要哪些查詢(xún)關(guān)鍵字,或者利用Criteria)。接著考慮對(duì)象的創(chuàng)建。需要考慮幾個(gè)方面。一個(gè)是對(duì)象的構(gòu)造函數(shù)參數(shù),尤其是聚合根對(duì)象,要考慮聚合中的對(duì)象保持不變量。同時(shí),還需要考慮標(biāo)識(shí)的問(wèn)題。第二要考慮是否需要工廠(chǎng)來(lái)封裝對(duì)象的創(chuàng)建;第三需要考慮是否需要復(fù)制對(duì)象,即是否采用原型模式。如果需要復(fù)制,則要考慮聚合中的對(duì)象,哪些需要?jiǎng)?chuàng)建新的對(duì)象,哪些需要復(fù)制。

接下來(lái),需要對(duì)模型進(jìn)行進(jìn)一步的細(xì)化。例如重點(diǎn)考慮循環(huán)引用。同時(shí),還要分析是否需要對(duì)象的抽象和多態(tài),以及是否需要考慮服務(wù)對(duì)象。

最后,是對(duì)模塊的劃分。最好不要根據(jù)模式來(lái)分類(lèi),將實(shí)體對(duì)象、值對(duì)象、資源庫(kù)等對(duì)象分別放在一起,而應(yīng)該按照業(yè)務(wù)邏輯的內(nèi)聚性對(duì)對(duì)象進(jìn)行模塊劃分。

注意,在識(shí)別領(lǐng)域模型時(shí),對(duì)于業(yè)務(wù)規(guī)則和約束來(lái)說(shuō),需要利用規(guī)格(Specification)模式對(duì)這些進(jìn)行封裝。另外,切忌將與業(yè)務(wù)和業(yè)務(wù)規(guī)則相關(guān)的職責(zé)放到應(yīng)用層中。應(yīng)用層應(yīng)該是薄薄的一層。當(dāng)然,在整個(gè)DDD設(shè)計(jì)過(guò)程中,還需要不斷迭代、精化和重構(gòu)。

轉(zhuǎn)載于:https://blog.51cto.com/wayfarer/290790

總結(jié)

以上是生活随笔為你收集整理的领域驱动设计的简略设计步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。