假设我有一个 BlogPost 聚合根。它拥有一个 List <Comment>
。
BlogPost AddComment 签名应该如何?是否可以使用:
公共无效添加评论(评论评论) { 评论。添加(评论); }
或者我应该避免在它之外创建对根的孩子的引用,并做这样的事情:
公共无效添加评论(字符串文本,字符串电子邮件) { 评论评论 = 新评论(文本,电子邮件); 评论。添加(评论); }
假设我有一个 BlogPost 聚合根。它拥有一个 List <Comment>
。
BlogPost AddComment 签名应该如何?是否可以使用:
公共无效添加评论(评论评论) { 评论。添加(评论); }
或者我应该避免在它之外创建对根的孩子的引用,并做这样的事情:
公共无效添加评论(字符串文本,字符串电子邮件) { 评论评论 = 新评论(文本,电子邮件); 评论。添加(评论); }
如果您认为 Comment 是 BlogPost 的集合,并且超出该范围没有意义,那么您应该使用第二个示例。
聚合根应该控制聚合的实例化方式,因此它们的构造函数在聚合根之外不可见。
另外,如果您想要 AggregateRoot-Aggregate 的真实关系,Comment 应该是 BlogPost 的子类。
如果您相信 DDD,那么了解聚合根下的某个实体是非常好的,只要您不在聚合之外的某处存储 ID 或对它的引用。
我会选择-blogPost.AddComment(new Comment(...))
版本。