14

假设我有一个 BlogPost 聚合根。它拥有一个 List <Comment>
BlogPost AddComment 签名应该如何?是否可以使用:

公共无效添加评论(评论评论)
{
    评论。添加(评论);
}

或者我应该避免在它之外创建对根的孩子的引用,并做这样的事情:

公共无效添加评论(字符串文本,字符串电子邮件)
{
    评论评论 = 新评论(文本,电子邮件);
    评论。添加(评论);
}
4

2 回答 2

7

如果您认为 Comment 是 BlogPost 的集合,并且超出该范围没有意义,那么您应该使用第二个示例。

聚合根应该控制聚合的实例化方式,因此它们的构造函数在聚合根之外不可见。

另外,如果您想要 AggregateRoot-Aggregate 的真实关系,Comment 应该是 BlogPost 的子类。

于 2009-02-19T20:15:21.920 回答
6

如果您相信 DDD,那么了解聚合根下的某个实体是非常好的,只要您不在聚合之外的某处存储 ID 或对它的引用。

我会选择-blogPost.AddComment(new Comment(...))版本。

于 2009-02-19T20:02:23.973 回答