什么是正确的聚合根?

时间:2011-11-11 13:09:19

标签: c# design-patterns domain-driven-design repository-pattern ddd-repositories

我有以下数据结构:

class Post
{
    public string Title { get; set;}
    public Category Category { get; set;}
}

请记住,帖子始终属于一个且只有一个类别是我的推理正确吗?

  • Category是聚合根(因为没有帖子就不能存在)
  • 应该有CategoryRepository(使用GetCategoryGetPost等方法)但不是PostRepository(因为Post不是聚合根)

2 个答案:

答案 0 :(得分:5)

您想如何引用Post的实例? Post.TitlePost的唯一标识符吗?如果是,那么Post 是一个有效的聚合根,您应该创建一个PostRepository来检索Post的实例,并给它Title。< / p>

以汽车为例。汽车必须有颜色,但说明颜色是聚合根只是因为没有汽车就不能存在是错误的事情。我想独立引用一辆车,因为它的牌照号码(与其颜色无关)。它必须有颜色这一事实只是我的汽车领域模型的一个特征,它表明我不能在不提供颜色的情况下构建汽车实例。

答案 1 :(得分:1)

在集合根设计注意事项时,我经常引用此资源  RavenDB - StackOverflow style voting with Live Projections。这解决了一些关键的思考过程,并且应该向您展示为什么Category会成为非常糟糕的聚合根。