DDD如何保存实体之间的关系?

时间:2016-12-20 07:01:31

标签: repository domain-driven-design

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

在DAO模式中,有一个对应于表的DAO,我们可以在DAO类中保持关系。但是在DDD中,有工作单元的概念,它可以确保聚合根工作正确,像这样,应该有一些关于聚合根的实体的存储库。但对于这种关系我不认为它应该有一个存储库,它不是一个实体。

是否有解决这些方案的最佳做法?或者我应该添加两个程序(添加帖子,添加类别)并在保存帖子时调用它们?

1 个答案:

答案 0 :(得分:2)

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

如果您考虑对象的结构,例如您的帖子,那么聚合将是具有类别的帖子。邮政将是聚合根。如果一个实体只是它自己的,你可以把它想象成一个聚合根本身(只是一个对象的聚合)。因此,创建存储库的规则是每个聚合根(或一个对象的单个实体)的规则。

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

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