DDD:“文章”中的“评论”应该是一个聚合根吗?

时间:2012-09-12 07:31:21

标签: domain-driven-design aggregateroot

我开始设计第一个简单的应用程序DDD风格,我开始看到这些概念是如何协同工作的。

如果我设计一个经典的博客应用程序,Article类将是我的聚合根之一。我想检索文章,管理和删除所有相关数据(出版日期,作者......)。我的评论有困难。起初,Comment似乎是作为Article聚合的一部分的实体:关于文章创建注释,如果我删除文章,我将删除相关注释。

然后我想在博客上显示一个小方框,其中包含博客上发布的最新评论,适用于任何文章。所以看起来我想从我的数据存储中检索注释(只有注释)。根据我对DDD思想的理解,这使它成为一个集合根。但这似乎并不完全正确,因为评论似乎强烈依赖于文章。

你会如何塑造它?

感谢。

1 个答案:

答案 0 :(得分:7)

当您考虑它时,您可能会发现Comment应该是聚合本身的各种原因:

  • 您想列出最新评论
  • 您可能希望列出特定用户的所有评论
  • 您可能希望嵌套评论(评论是对其他评论的回复)
  • 您可能希望通过管理界面批准/拒绝评论
  • 用户可能想要编辑或删除他/她的评论
  • ...

我将以下内容作为一般经验法则:尽可能减少聚合。如果有疑问,可以选择更多的聚合。

通过这种方式建模,您可以将评论附加到多个对象,例如ArticleUser

Comment
    string Text
    string UserName
    bool IsApproved

Article
    string Title
    string Body
    ...
    List<CommentIds> CommentIds

User
    string UserName
    ...
    List<CommentIds> CommentIds

ListOfTenLatestComments
    List<CommentIds> CommentIds