asp.net-mvc - 帖子和评论应该在帖子聚合中还是应该是它们自己的聚合?

标签 asp.net-mvc domain-driven-design repository blogs aggregate

考虑带有对象的典型博客 PostComment .

对于我一直在构建的 DDD 演示示例,我(直到现在)发现两个实体 PostComment已适用于相同的聚合 - Post总计的。但现在我不太确定..

在我的 Controller 中,正如您所期望的那样,我发现我需要添加和删除 Comments来自 Posts .使用我当前的模型,我不会跟踪 Comment 的身份全局范围内(就像蓝皮书建议的那样)。你可能希望我的操作删除一个 Comment可能看起来像这样:

public ActionResult DeleteComment(int postID, int commentID)

显然我需要 Post从存储库中检索它的 id 和特定 Comment 的标识符在那Post我想删除。

我的问题是 DeleteComment( 的正文行动:

可以遍历Post用查询机制获取Comment删除?像这样:
var comment = this._postRepo.WithID(postID).Comments
    .SingleOrDefault(c => c.ID == commentID);
this._postRepo.Delete(comment);
return RedirectToAction("detail", new { id = postID });

..或者我应该选择 Comment来自与此类似的 repo ?:
var comment = this._postRepo.CommentWithID(commentID)

..或者:
var comment = this._postRepo.CommentWithID(postID, commentID)

上面的两个例子可能看起来有点傻,因为我不需要 Post如果我可以跟踪 Comment 的 ID全局。但是,如果我正在跟踪 Comment在全局范围内,它不应该有自己的聚合,然后是正确的 PostComment好像一起去?

最佳答案

正如其他人所说,这在很大程度上取决于评论是否在帖子之外具有任何意义。我倾向于认为确实如此,原因有几个。首先,从概念上讲,可以在普通博客引擎中对帖子以外的内容进行评论(例如,图像、新闻项目、另一条评论)。其次,正如也提到的,您经常会看到仅评论的小部件,这些小部件独立于他们的帖子。我还认为这种情况会使您为之苦恼的决定变得更加琐碎。

也就是说,如果您确实选择使它们成为一个聚合,那么请记住,在进行查询时,存储库通常会加载整个聚合,依靠缓存等机制来提高效率。因此,您的场景将是对帖子的查询,然后搜索该帖子的评论以查找“正确”评论以进行编辑/删除/任何操作。

关于asp.net-mvc - 帖子和评论应该在帖子聚合中还是应该是它们自己的聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113886/

相关文章:

php - 将 Doctrine 与领域驱动设计结合使用

oop - DDD - 应如何设计域规则,以便上层知道规则何时被破坏?

git - 将单个文件从克隆的仓库推送到 fork 的仓库

git - 如何将 redmine 用户与存储库用户链接起来

maven - 如何将JAR部署到Maven远程仓库

c# - 在一个 Controller 中有很多方法 VS 在多个 Controller 中有很多方法

asp.net-mvc - ApplicationUserManager 不使用我的自定义 UserStore 实现

c# - ASP.NET MVC : How to default to a page given certain condition?

asp.net-mvc - Asp.Net MVC - 所有 Controller 的通用数据

validation - 在哪里放置需要数据库查找的值对象的验证?