【问题标题】:DDD how to save relationship between entities?DDD如何保存实体之间的关系?
【发布时间】:2017-05-05 07:55:00
【问题描述】:

我是 DDD 世界的新手,我想通过 ADO.NET 将它应用到我们的 DDD 应用程序中。 DDD中有实体、聚合根、值对象。我有两个实体,例如可能属于多个类别的博客文章。实际上我认为博客文章和类别都应该是聚合根。博客文章和类别都有一个存储库,PostRepository 和 CategoryRepository,但是现在我对如何实现帖子和类别实体之间的 1:many 关系的持久性感到困惑。

在DAO模式中,有一个DAO对应一个表,我们可以将关系持久化在DAO类中。但是在 DDD 中,有 Unit of work 的概念,它可以保证聚合根的正常工作,像这样,应该有一些关于聚合根的实体的存储库。但是对于关系,我认为它不应该有存储库,它不是这里的实体。

是否有解决这些情况的最佳实践?或者我应该添加两个过程(添加帖子,添加类别)并在我保存帖子时调用它们?

【问题讨论】:

标签: repository domain-driven-design


【解决方案1】:

每个聚合根应该有一个存储库。

如果您考虑对象的结构,例如您的帖子,那么聚合将是带有类别的帖子。 Post 将是聚合根。如果一个实体独立存在,您可以将其视为其自身的聚合根(只是一个对象的聚合)。因此,您创建存储库的规则是针对每个聚合根(或一个对象的单个实体)。

如果您将类别作为帖子聚合的一部分,那么您绝不能直接访问或修改类别。如果类别需要更改,则通过 Post 对象完成。如果这听起来不像您的域模型并且您正在考虑“但我想单独管理我的类别”,那么很有可能 Category 不属于 Post 聚合。如果不是,您可能希望将 Category 建模为它自己的实体,并通过 Post 实体的 id(不是对象引用)引用它。

然后如何继续为类别建模取决于您自己的域。 DDD经常发生这种情况。但这一切都很好。这只是意味着您为域建模的方式 100% 取决于您的特定域的工作方式。

【讨论】:

  • 谢谢Adrian,这里我会单独管理分类。我使用一个表来存储帖子所属类别的关系,在带有实体框架的DDD中它会自动完成,如果没有ORM,是否有优雅的模式来保存帖子及其类别?
  • 你可以使用类似 ADO.NET 的东西,首先删除现有的链接,然后重新插入它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
相关资源
最近更新 更多