gpt4 book ai didi

c# - DDD : Aggregate Root accessed by another aggregate root

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:56 25 4
gpt4 key购买 nike

我目前正在开发 DDD 应用程序,我对如何处理似乎必须从另一个聚合根访问聚合根的场景感到困惑。这是我的边界上下文的概述:

用户可以加入该站点并就他们感兴趣的主题创建帖子。他们还可以创建群组并针对他们创建的群组发布特定的帖子,或发布供所有站点成员查看的帖子。用户还可以为他们的个人资料页面上传照片以供其他人查看或上传 word 文档和 pdf 文件以与帖子相关联。用户可以允许其他用户加入他们的群组或仅邀请群组。

用户(代表站点的成员)
帖子(一个用户可以创建多个帖子)
文件(用户可以将图像关联到他们的个人资料页面;将 word 文档或 pdf 关联到他们的帖子)
组(一个用户可以创建任意数量的其他用户可以加入的组)

将其分开的正确方法是什么,我认为在这种情况下每个都是 AR?

在这种情况下,User 和另一个 AR 之间似乎存在 FK 关系,这种关联应该用 Value 对象还是 AR 来表示?

由于文件 AR 似乎以 FK 类型关系连接到 User 和 Post,我应该如何从 AR 或 Value 对象表示它?

One to many    
User -> Posts
User -> File
User -> Group

One to many
Posts -> File

最佳答案

在设计聚合根时,您必须问自己,这个实体是由什么定义的,而不是这个实体“拥有”什么。例如,用户可以在没有帖子的情况下存在吗?我猜是的。所以在这种情况下,Post 将是它自己的 AR。在这种情况下,您只需要引用 UserID。

您的大多数实体最终都会成为 AR。请记住,您在这里建模的是业务问题的解决方案,而不是数据库表。当我开始 DDD 时,这让我很困惑。您必须问自己一些尖锐的问题,例如为什么我的用户实体需要一组帖子?您可能只有一个业务规则,规定您在第一个月只能发布 10 个帖子(仅举个例子)。为此,您可以只拥有一个名为 TotalPosts 的 int 字段,并一起丢失集合。现在,您不必为了加载用户而加载可能数百个 Post 对象。

总而言之,您希望域中的大部分 AR 仅通过 ID 相互引用。您的域可能与您的数据库架构不匹配。对于您域中的不同限界上下文,同一 AR 有多个“版本”是可以的。

关于c# - DDD : Aggregate Root accessed by another aggregate root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26810422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com