3

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

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

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

你会如何建模?

谢谢。

4

1 回答 1

9

当您考虑它时,您可能会发现为什么 aComment应该是一个Aggregate本身的各种原因:

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

我将以下作为一般经验法则:使您的聚合尽可能小。如有疑问,请选择更多聚合。

通过这种方式建模,您可以将评论附加到多个对象,例如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
于 2012-09-12T14:41:12.827 回答