C# 正确的聚合根是什么?

C# 正确的聚合根是什么?,c#,design-patterns,domain-driven-design,repository-pattern,ddd-repositories,C#,Design Patterns,Domain Driven Design,Repository Pattern,Ddd Repositories,我有以下数据结构: class Post { public string Title { get; set;} public Category Category { get; set;} } 记住一篇文章总是属于一个范畴,而且只有一个范畴,我的推理正确吗 Category是聚合根目录(因为没有它,帖子不可能存在) 应该有CategoryRepository(使用GetCategory和GetPost等方法),但没有PostRepository(因为Post不是聚合根) 您希望

我有以下数据结构:

class Post
{
    public string Title { get; set;}
    public Category Category { get; set;}
}
记住一篇文章总是属于一个范畴,而且只有一个范畴,我的推理正确吗

  • Category
    是聚合根目录(因为没有它,帖子不可能存在)
  • 应该有
    CategoryRepository
    (使用
    GetCategory
    GetPost
    等方法),但没有
    PostRepository
    (因为
    Post
    不是聚合根)

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


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

当涉及到聚合根设计考虑时,我经常引用此资源
. 这解决了您的一些关键思考过程,并应该向您说明为什么类别是一个非常糟糕的聚合根。

我没有理解您不考虑使用
PostRepository
。也许拥有
GetPost
符合
CategoryRepository
的逻辑,但是
Post
有自己的领域,它有自己的唯一目的。如果我错过了,请告诉我anything@MunimAbdul因为
Post
不是聚合根,所以应该只为聚合根创建存储库。太棒了!谢谢你的链接。另一个很好的例子-标签。在写关于编程的文章之前,您不会创建标记“编程”,而是将其关联起来。