Domain driven design 如何将对象添加到由聚合根维护的集合中

Domain driven design 如何将对象添加到由聚合根维护的集合中,domain-driven-design,Domain Driven Design,假设我有一个BlogPost聚合根。它包含一个列表 blogpostaddcomment签名应该是什么样子?是否可以使用: public void AddComment(Comment comment) { Comments.Add(comment); } 公共无效添加注释(注释注释) { 注释。添加(注释); } 或者我应该避免在它之外创建对root的子级的引用,并执行以下操作: public void AddComment(string text, string email) {

假设我有一个BlogPost聚合根。它包含一个列表

blogpostaddcomment签名应该是什么样子?是否可以使用:

public void AddComment(Comment comment) { Comments.Add(comment); } 公共无效添加注释(注释注释) { 注释。添加(注释); } 或者我应该避免在它之外创建对root的子级的引用,并执行以下操作:

public void AddComment(string text, string email) { Comment comment = new Comment(text, email); Comments.Add(comment); } public void AddComment(字符串文本、字符串电子邮件) { 评论=新评论(文本、电子邮件); 注释。添加(注释); }
如果您相信DDD,那么了解聚合根下的某个实体是完全正确的,只要您不在聚合之外的某个地方存储ID或对它的引用


我会选择<代码>博客文章。AdDebug(new注释(…))<代码> -< /p> 如果你认为注释是博客帖子的集合,并且不能从该范围中理解,那么你应该使用第二个例子。 聚合根应控制聚合的实例化方式,以便其构造函数在聚合根之外不可见

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