我是DDD世界的新手,我想用ADO.NET将它应用到我们的DDD应用程序. DDD中有实体,聚合根,值对象.我有两个实体,例如博客文章,可能属于几个类别.实际上我认为博客文章和类别都应该是聚合根.博客文章和类别都有一个存储库,PostRepository和CategoryRepository,但现在我对如何实现post和category实体之间1:many关系的持久性感到困惑.
在DAO模式中,有一个对应于表的DAO,我们可以在DAO类中保持关系.但是在DDD中,有工作单元的概念,它可以确保聚合根工作正确,像这样,应该有一些关于聚合根的实体的存储库.但对于这种关系,我认为它不应该有一个存储库,它不是一个实体.
有没有最佳实践来解决这些情况?或者我应该添加两个程序(添加帖子,添加类别)并在保存帖子时调用它们?
最佳答案 每个聚合根应该有一个存储库.
如果您考虑对象的结构,例如您的帖子,那么聚合将是具有类别的帖子.邮政将是聚合根.如果一个实体只是它自己的,你可以把它想象成一个聚合根本身(只是一个对象的聚合).因此,您创建存储库的规则是每个聚合根(或一个对象的单个实体)的规则.
如果您将Post聚合作为类别的一部分,那么您必须永远不要直接访问或修改类别.如果类别需要更改,则通过Post对象完成.如果这听起来不像你的域模型而且你在考虑“但我想分别管理我的类别”,那么类别很可能不属于Post聚合.如果没有,您可能希望将Category建模为它自己的实体,并通过Post实体的id(而不是对象引用)引用它.
然后你如何继续模型类别取决于你自己的域. DDD会发生很多这种情况.但这一切都很好.它只是意味着您对域建模的方式100%取决于您的特定域的工作方式.