领域驱动设计聚合根设计
Posted
技术标签:
【中文标题】领域驱动设计聚合根设计【英文标题】:Domain Driven Design aggregate root design 【发布时间】:2013-10-29 00:31:54 【问题描述】:您好,我正在尝试对一个简单的类集群进行 DDD。
举个例子。
我有渠道和贷方。
频道 = 频道 A、频道 B 贷方 = 银行 A、银行 B、银行 C
通道 A 有 Bank A, B 通道 B 有 Bank B, C
在这种情况下我将如何设计我的聚合根?
聚合 id 应该是银行特定的吗?还是应该是特定于频道的?
在我的其他聚合中,我只想知道它是 ChannelA-BankA 还是 ChannelB-BankC,也就是一个唯一的 Id。
在我看来,我可以将 Channel 设置为聚合根实体,或者将 Bank 设置为聚合根实体,这不会有什么不同吗?它们是一对一的关系。
或者我应该创建一个***类作为根并引用 Channel 和 Bank?
有什么建议吗?
【问题讨论】:
1 对 1、多对多等在 DDD 中没有位置,这些是 rdbms 思维方式工件,避免使用它们。领域对象对领域概念、行为和用例进行建模。使用的语言必须是领域专家使用的语言(而不是基于特定技术的技术语言)。 【参考方案1】:聚合设计总是很棘手,您对领域的了解越深,它就会变得越容易。对于一个局外人来说,帮助是相当困难的(或不可能的):)
但请记住,这不一定是“哪一个是聚合?”的问题。在您的情况下,很可能 both 都是聚合,并且您通过值对象 (VO) 或 Id 将它们链接起来。例如,您可以使用 Channel
和 ChannelLender
VO,并且在您拥有 Channel
/Bank
链接的那些“其他”聚合中,您可以使用其他一些 VO,并且由于使用了 ChannelLender
,您将需要一个代表该概念的通用语言 (UL) 名称。
希望对您有所帮助。
【讨论】:
以上是关于领域驱动设计聚合根设计的主要内容,如果未能解决你的问题,请参考以下文章