【问题标题】: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 思维方式工件,避免使用它们。领域对象对领域概念、行为和用例进行建模。使用的语言必须是领域专家使用的语言(而不是基于特定技术的技术语言)。

标签: c# oop domain-driven-design aggregate


【解决方案1】:

聚合设计总是很棘手,您对领域的了解越深,它就会变得越容易。对于一个局外人来说,帮助是相当困难的(或不可能的):)

但请记住,这不一定是“哪一个是聚合?”的问题。在您的情况下,很可能 both 都是聚合,并且您通过值对象 (VO) 或 Id 将它们链接起来。例如,您可以使用 ChannelChannelLender VO,并且在您拥有 Channel/Bank 链接的那些“其他”聚合中,您可以使用其他一些 VO,并且由于使用了 ChannelLender,您将需要一个代表该概念的通用语言 (UL) 名称。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2010-11-01
    • 2010-11-30
    • 1970-01-01
    • 2011-04-26
    • 2013-09-16
    • 2019-06-27
    • 1970-01-01
    相关资源
    最近更新 更多