什么是正确的聚合根

本文关键字:什么 | 更新日期: 2023-09-27 18:14:05

我有以下数据结构:

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

记住一个post 总是属于一个而且只有一个类别是我的推理正确吗?

  • Category是聚合根(因为帖子不能没有它而存在)
  • 应该有CategoryRepository(方法如GetCategoryGetPost),但不应该有PostRepository(因为Post不是聚合根)

什么是正确的聚合根

如何引用Post的实例?Post.TitlePost的唯一标识符吗?如果是这样,那么Post 一个有效的聚合根,你应该创建一个PostRepository,它检索Post的实例,给定它是Title

以汽车为例。一辆车必须有颜色,但仅仅因为一辆车没有颜色就不能存在,就认为颜色是聚合根,这是错误的做法。我想参考一个汽车独立给定它的车牌号码(这是独立于它的颜色)。它必须有颜色的事实只是我的汽车域模型的一个特征,它表明我不能在不提供颜色的情况下构造一个汽车实例。

当涉及到聚合根设计时,我经常引用这个资源RavenDB - StackOverflow风格投票与实时投影。这解决了一些关键的思考过程,并应该向您展示为什么Category将是一个非常糟糕的聚合根。