Ron*_*ith 5 domain-driven-design repository
我是 DDD 世界的新手,我想通过 ADO.NET 将其应用到我们的 DDD 应用程序中。DDD中有实体、聚合根、值对象。我有两个实体,例如博客文章,它可能属于多个类别。其实我觉得博文和分类都应该是聚合根。博客文章和类别都有一个存储库,PostRepository和CategoryRepository,但现在我很困惑如何实现帖子和类别实体之间1:多关系的持久化。
在DAO模式中,有一个DAO对应一个表,我们可以在DAO类中持久化关系。但是在DDD中,有工作单元的概念,它可以保证聚合根正确工作,这样,应该有一些关于聚合根实体的存储库。但对于这种关系,我认为它不应该有一个存储库,它不是这里的一个实体。
是否有解决这些场景的最佳实践?或者我应该添加两个过程(添加帖子,添加类别)并在保存帖子时调用它们?
每个聚合根应该有一个存储库。
如果您考虑对象的结构,例如您的帖子,那么聚合将是带有类别的帖子。邮政将是聚合根。如果一个实体只是独立存在的,那么您可以将其视为自身的聚合根(只是一个对象的聚合)。因此,创建存储库的规则是针对每个聚合根(或一个对象的单个实体)的规则。
如果您将类别作为帖子聚合的一部分,则您绝不能直接访问或修改类别。如果类别需要更改,可以通过 Post 对象完成。如果这听起来不像您的域模型,并且您在想“但我想单独管理我的类别”,那么类别很可能不属于帖子聚合。如果没有,您可能希望将 Category 建模为它自己的实体,并通过 Post 实体中的 id (而不是对象引用)引用它。
然后,您如何继续对类别进行建模取决于您自己的领域。这种情况在 DDD 中经常发生。但一切都很好。这只是意味着您对域进行建模的方式 100% 取决于您的特定域的工作方式。