2016-12-20 79 views
4

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

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

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

+0

[DAO和Repository模式有什么区别?](http://stackoverflow.com/questions/8550124/what-is-the-difference-between-dao-and-repository-patterns) – guillaume31

回答

2

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

如果你考虑对象的结构,比如你的文章,那么聚合就是带有类别的文章。邮政将是聚合根。如果一个实体是独立存在的,你可以把它看作是一个聚合根(它只是一个对象的集合)。因此,您创建存储库的规则是每个聚合根(或一个对象的单个实体)的规则。

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

然后你如何去模型分类取决于你自己的域。 DDD会发生这种情况。但都很好。这仅仅意味着你对域的建模方式完全取决于你的特定域的工作方式。

+0

谢谢阿德里安,在这里我将分开管理这个类别。我使用表格来存储帖子所属类别的关系,在具有实体框架的DDD中,它将自动完成,如果没有ORM,是否有优雅的模式来保存帖子及其类别? – RonSmith

+0

您可以使用ADO.NET之类的东西,首先删除现有链接,然后重新插入它们。 –