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

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

生活随笔

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

编程问答

DDD中的聚合和UML中的聚合以及组合的关系

發(fā)布時(shí)間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DDD中的聚合和UML中的聚合以及组合的关系 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

UML:
聚合關(guān)系:成員對(duì)象是整體的一部分,但是成員對(duì)象可以脫離整體對(duì)象獨(dú)立存在。
如汽車(chē)(Car)與引擎(Engine)、輪胎(Wheel)、車(chē)燈(Light)之間的關(guān)系為聚合關(guān)系,引擎、輪胎、車(chē)燈可以脫離車(chē)而存在,比如把一個(gè)引擎換到另一個(gè)汽車(chē)上也可以。

組合關(guān)系:也表示的是一種整體和部分的關(guān)系,但是在組合關(guān)系中整體對(duì)象可以控制成員對(duì)象的生命周期,一旦整體對(duì)象不存在,成員對(duì)象也不存在,整體對(duì)象和成員對(duì)象之間具有同生共死的關(guān)系。

所以,聚合和組合的差別就一點(diǎn):整體和部分的生命周期是否一致,即整體消亡后,成員對(duì)象是否可以脫離整體對(duì)象而單獨(dú)存在。

DDD聚合關(guān)系:
也是一種整體和部分的關(guān)系,部分脫離整體會(huì)變得毫無(wú)意義,強(qiáng)調(diào)同生共死的一致的生命周期。所以,從定義來(lái)看DDD中的聚合應(yīng)該和UML中的組合關(guān)系是一致的。

按照上面的定義,我們?cè)趤?lái)分析一下一個(gè)典型的例子,就是公司和部門(mén)的關(guān)系。

UML的角度:
1、一個(gè)公司由多個(gè)部門(mén)組成,所以滿足整體和部分的關(guān)系;
2、一個(gè)部門(mén)不能脫離公司和加入到其他公司;

所以,在UML中應(yīng)該屬于組合關(guān)系,沒(méi)有問(wèn)題。

DDD的角度:
雖然基于UML的角度,公司和部門(mén)屬于組合關(guān)系,那在DDD中是否應(yīng)該把部門(mén)聚合在公司下面呢?我的看法是,雖然從生命周期上,確實(shí)部門(mén)不能脫離公司。
但是DDD的聚合設(shè)計(jì)要考慮的因素會(huì)更加豐滿,比如:

  • DDD強(qiáng)調(diào)需求和Bounded Context,也就是會(huì)基于需求和上下文進(jìn)行建模,我們建模前必須要先確定當(dāng)前的需求和上下文是什么;

  • 整體在當(dāng)前上下文是否強(qiáng)關(guān)心部分的存在;

  • 整體和部分之間是否存在某些不變性規(guī)則;

  • 操作整體與操作部分的業(yè)務(wù)場(chǎng)景是否一致;

  • 性能問(wèn)題,如果整體聚合的部分?jǐn)?shù)量過(guò)大,那也不會(huì)考慮聚合,即小聚合原則;

  • 一致性問(wèn)題,我們?cè)谠O(shè)計(jì)系統(tǒng)時(shí),即便把本該是聚合在一起的對(duì)象分開(kāi)設(shè)計(jì)為多個(gè)聚合,也可以從技術(shù)上去解決一致性,比如通過(guò)領(lǐng)域服務(wù)來(lái)完成多個(gè)聚合的協(xié)同創(chuàng)建、刪除、修改,并能通過(guò)數(shù)據(jù)庫(kù)事務(wù)來(lái)保證嚴(yán)格的強(qiáng)一致性;

  • DDD領(lǐng)域建模會(huì)對(duì)領(lǐng)域概念進(jìn)行抽象,所以再領(lǐng)域模型中,也許就沒(méi)有公司了,而是只有部門(mén),把公司也看成是一個(gè)頂層的部門(mén)就行,所以自然就不會(huì)有公司這個(gè)聚合根了;

所以,在進(jìn)行DDD聚合設(shè)計(jì)時(shí),如果僅從整體刪除后部分會(huì)變得毫無(wú)意義(即對(duì)象之間的生命周期)這個(gè)點(diǎn)去推導(dǎo)的話,那考慮的就太單薄了,很有可能會(huì)得出不合理的聚合設(shè)計(jì)。
這是沒(méi)有認(rèn)真分析業(yè)務(wù)需求,沒(méi)有分析業(yè)務(wù)規(guī)則不變性,沒(méi)有對(duì)領(lǐng)域概念進(jìn)行合理抽象,沒(méi)有進(jìn)行OO軟件設(shè)計(jì)原則的應(yīng)用的表現(xiàn)。

我想,這也是為什么DDD聚合設(shè)計(jì)為何會(huì)如此之難的原因了。

所以,結(jié)論是,以上案例由于需求不明,無(wú)法進(jìn)行聚合設(shè)計(jì),大家是不是很意外呢?居然沒(méi)有給出答案:)

原文地址:https://www.cnblogs.com/netfocus/p/11078464.html

總結(jié)

以上是生活随笔為你收集整理的DDD中的聚合和UML中的聚合以及组合的关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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