2 回答

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
所有頂級(jí)實(shí)體都是聚合根。在您當(dāng)前的設(shè)計(jì)中,UserEntity
和SettingsEntity
是有效的聚合根 (AR)。AR 是事務(wù)性和一致性邊界。AR 的作用是確保與它們封裝的數(shù)據(jù)相關(guān)的不變量永遠(yuǎn)不會(huì)被破壞,即使通過并發(fā)也是如此。
AR 應(yīng)該設(shè)計(jì)得盡可能小,因?yàn)樗鼈兛梢苑乐箤?duì)它們保護(hù)的數(shù)據(jù)進(jìn)行并發(fā)修改。為了從 AR 模式中受益,您必須努力將 AR 視為事務(wù)邊界,因此對(duì)于大多數(shù)用例(可能存在例外),嘗試只修改每個(gè)事務(wù)的單個(gè) AR。但是,該規(guī)則在創(chuàng)建 AR 時(shí)并不適用,因?yàn)樵趧?chuàng)建時(shí)并發(fā)沖突不應(yīng)該是常見的。
這里有兩種顯而易見的潛在設(shè)計(jì),正確的一種取決于實(shí)際的業(yè)務(wù)不變量和您想要做出的妥協(xié)。
User
并且Settings
具有交叉不變量,這意味著不變量User
可能取決于狀態(tài),Settings
反之亦然。在這種情況下User
,并且Settings
必須是同一一致性邊界的一部分。您很可能擁有User
AR 和Settings
生活在User
.User
并且Settings
可以獨(dú)立進(jìn)化(除了他們的創(chuàng)造)。在這種情況下,您很可能希望將User
和Settings
作為自己獨(dú)立的 AR,但在同一個(gè)事務(wù)中創(chuàng)建兩者(或不創(chuàng)建 - 最終一致性)。請(qǐng)注意,在 AR 上使用工廠方法來創(chuàng)建另一個(gè)工廠方法通常很優(yōu)雅。transaction { user = new User(…) settings = user.initSettings(...) userRepository.save(user); settingsRepository.save(settings);}
從那時(shí)起,
User
將Settings
在不同的事務(wù)中進(jìn)行修改。
PS:我建議刪除諸如“實(shí)體”之類的技術(shù)前綴。語言是 DDD 的關(guān)鍵,我懷疑領(lǐng)域?qū)<以谒麄兊恼Z言中使用“UserEntity”(甚至可能不是“User”)或“SettingsEntity”這個(gè)詞。

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
這取決于它是否是新用戶。
如果它是現(xiàn)有用戶,則處理它的一種方法是使用存儲(chǔ)庫“水合”用戶和存儲(chǔ)中的設(shè)置。然后修改。
如果是新用戶,您可以使用工廠實(shí)例化聚合根(用戶實(shí)體)并使用符合 UL 的工廠方法從輸入生成設(shè)置。
擁有用戶對(duì)象后,將其發(fā)送到存儲(chǔ)庫以進(jìn)行持久化。
- 2 回答
- 0 關(guān)注
- 210 瀏覽
添加回答
舉報(bào)