DDD:用户聚合根与其他聚合中的几乎所有实体之间的一对多关系

我有以下DDD方案,分为以下聚合:

用户,
朋友(用户协会),
文件(用于用户上传),
画廊(文件分组),
消息(用户通信),
组(用户可以创建和其他成员可以加入),
GroupMessages(发送给组中所有成员的消息),
GroupForums(小组成员可以讨论各种主题)

这是令人困惑的地方。 用户与GroupForums之间的所有内容相关联。 通过用户存储库访问其他聚合似乎是不合逻辑的,但从级联的角度来看,如果我从技术上删除了用户,那么与用户关联的记录也应该消失。

似乎我不应该将这里存在的所有一对多关联添加到用户实体,因为从数据库中保湿似乎是荒谬的,特别是如果我尝试拉动与用户相关联的每个记录。 组织聚合和存储库的推荐策略是什么,以及处理给定实体的大量一对多关系的正确方法?

您在句子“用户与所有事物相关联……”中使用“关联”一词这一事实非常明显。 对于聚合根来说,或者甚至是一个“属于”另一个根,这是绝对正常的。 但是,您需要查看实体是否可以在没有AR的情况下存在。 如果可能,它可能有自己的生命周期,应该是AR。 如果它不能它是聚合的一部分。 提炼这可能很棘手。

您需要在AR周围有一个非常清晰的边界。 例如,即使论坛可能要求用户创建它,但这并不意味着在删除用户时需要(或甚至可以)删除论坛。 因此,论坛中的用户可能会成为仅包含用户名和ID的ForumCreator (值对象)。 删除用户后,论坛可以继续存在。

在Order / OrderLine / Product方案中,如果您选择删除包含特定产品的所有订单行,那么删除所有订单行没有多大意义。 我知道可能永远不会删除产品,但我们会以它为例。 您只需将相关产品数据“非规范化”到订单行中,例如:产品ID,产品名称。 因此,即使产品名称恰好发生变化,也并不意味着所有订单行都需要更新,甚至不应该更新。 实际上,订单行代表一个时间点,应保留“原始”产品名称。 购买者可能已经订购了“一些lirril产品”,然后将名称改为“Little product”。 虽然它是完全相同的产品,但不一样。 购买者只记得原件。

我希望这在某种程度上有意义并有所帮助。 你肯定需要找到对象图的那些硬边来获得真实的聚合。