什么是正确的聚合根
本文关键字:什么 | 更新日期: 2023-09-27 18:14:05
我有以下数据结构:
class Post
{
public string Title { get; set;}
public Category Category { get; set;}
}
记住一个post 总是属于一个而且只有一个类别是我的推理正确吗?
-
Category
是聚合根(因为帖子不能没有它而存在) - 应该有
CategoryRepository
(方法如GetCategory
和GetPost
),但不应该有PostRepository
(因为Post
不是聚合根)
如何引用Post
的实例?Post.Title
是Post
的唯一标识符吗?如果是这样,那么Post
是一个有效的聚合根,你应该创建一个PostRepository
,它检索Post
的实例,给定它是Title
。
以汽车为例。一辆车必须有颜色,但仅仅因为一辆车没有颜色就不能存在,就认为颜色是聚合根,这是错误的做法。我想参考一个汽车独立给定它的车牌号码(这是独立于它的颜色)。它必须有颜色的事实只是我的汽车域模型的一个特征,它表明我不能在不提供颜色的情况下构造一个汽车实例。
当涉及到聚合根设计时,我经常引用这个资源RavenDB - StackOverflow风格投票与实时投影。这解决了一些关键的思考过程,并应该向您展示为什么Category将是一个非常糟糕的聚合根。