代码之家  ›  专栏  ›  技术社区  ›  Antoine Roux

DDD:“文章”中的“Comment”应该是聚合词根吗?

  •  3
  • Antoine Roux  · 技术社区  · 13 年前

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

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

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

    你会如何建模?

    谢谢

    1 回复  |  直到 13 年前
        1
  •  10
  •   Dennis Traub    13 年前

    仔细想想,你可能会发现 Comment 应该是 总数的 本身:

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

    我认为以下是一条一般的经验法则:保持你的聚合尽可能小。如果有疑问,请选择更多的聚合。

    通过这种方式建模,您可以将注释附加到多个对象,例如 Article User

    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