Domain driven design 聚合建模

Domain driven design 聚合建模,domain-driven-design,Domain Driven Design,我有以下要求: 有些文章是由管理员用户创建的 每一篇文章都有与文章相关的问题 管理员每篇文章可以问1到3个问题 每个问题可以有2到5个答案 在文章发表之前,问题文本和答案文本可以随时修改 最后,管理员发布文章,其他用户可以为文章的每个问题选择答案 在这种情况下,您可以为文章创建一个聚合,为问题创建一个聚合,为答案创建一个聚合 如果是,如何保持一篇文章在1到3个问题之间的不变量 如果没有,您将如何建模 非常感谢 文章聚合包括一组对问题的引用(通过聚合根,例如问题ID) 如果某篇文章已有3个参

我有以下要求:

  • 有些文章是由管理员用户创建的
  • 每一篇文章都有与文章相关的问题
  • 管理员每篇文章可以问1到3个问题
  • 每个问题可以有2到5个答案
  • 在文章发表之前,问题文本和答案文本可以随时修改
  • 最后,管理员发布文章,其他用户可以为文章的每个问题选择答案
在这种情况下,您可以为文章创建一个聚合,为问题创建一个聚合,为答案创建一个聚合

如果是,如何保持一篇文章在1到3个问题之间的不变量

如果没有,您将如何建模

非常感谢

  • 文章聚合包括一组对问题的引用(通过聚合根,例如问题ID)
  • 如果某篇文章已有3个参考文献,则尝试添加对该问题的参考文献将失败

由于聚合定义了一致性边界,因此发布文章就是一个传奇。如果你想让问题跟踪与之相关的文章(你没有直接说这个问题保持不变,它只与一篇文章相关),那么添加一个问题同样会成为一个传奇。

谢谢你的回复。如果在文章聚合中包含一个问题计数器而不是一组对问题聚合根的引用,并且如果在文章聚合中包含对问题的引用集,则可以,当我持久化文章聚合时,您将如何在文章表中的列中持久化该引用?,在一个单独的表中?您可能可以使用计数器,但是:1)如果您将有一个“与本文相关联的问题”的查询,您应该跟踪它,2)可能需要允许尝试将问题与已经相关联的文章相关联才能成功(因为它毕竟不能违反约束),而计数器并不能提供这种能力。DDD倾向于只将DBs用作文档存储(或者甚至只是作为包含元数据的blob存储,特别是在进行CQR时,如果进行事件源搜索,则更是如此):访问聚合的限制(根除外)是一个主要原因(约束的强制执行及其作为事务边界也使得DDD排除了关系模型的许多好处)。如果你要用关系表示它,如果数量有限,那么3列就可以了,否则一个包含article ID和question ID列的表就可以了。我会采取类似的方法:答案是一个聚合,而question维护一组引用(尽管2到5的要求很有趣:这可能意味着将Notyetanswered问题建模为与问题稍有不同的东西)