DDD:一个一对多的用户聚合根和其他聚集几乎所有的实体之间的关系(DDD: one-to-many

2019-09-02 00:04发布

我有以下DDD的场景,分为以下几个聚集:

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

这是它得到混乱。 用户使用都记录下来,以GroupForums相关。 这似乎不合逻辑不得不通过用户资源库,虽然访问其他聚集,从层叠的角度来看,如果我删除了用户,在技术上,与用户相关联的记录应走为好。

它好像我不应该添加所有,要么存在这里用户实体一个一对多关联,作为保湿从数据库中似乎是荒谬的,特别是当我尝试拉与用户相关联的所有记录。 什么是组织你的聚集,并库,以及有很多一个一对多的关系的处理对于给定的实体的正确方法推荐的策略是什么?

Answer 1:

你在用你的句子“关联”这个词的事实“的用户与相关的一切...”是一个相当线索。 这是绝对的罚款将相关总根源,甚至一到“属于”到另一个。 但是,你需要看没有AR是否可以存在的实体。 如果可以,它可能有自己的生命周期,应该是一个AR。 如果它不能是聚合的一部分。 这可能会非常棘手蒸馏。

你必须在你的人工鱼礁一个非常明确的边界。 例如,即使一个论坛,可能需要用户来创建它,这并不意味着该论坛需要(甚至可以),当用户被删除被删除。 所以在论坛用户可能会,比方说, ForumCreator只包含用户名和ID(值对象)。 当用户被删除,那么该论坛可以继续它的存在。

在订单/订单行/产品方案,将没有多大意义,删除包含特定产品,如果你选择删除所有订单行。 我知道,一个产品可能应该永远不会被删除,但我们会用它作为一个例子。 你只会有相关的产品数据“去标准化”到订单行,如:产品编号,产品名称。 所以,即使产品名称发生改变,这并不意味着,所有的命令行需要更新,甚至应该进行更新。 事实上,该命令行表示时间和“原始”的产品名称应保留一个点。 买方可能已下令“有些lirril产品”,然后将名称变更为“小产品”。 不虽然它同样的事情是完全一样的产品。 购买者只记得原来的。

我希望是有道理的,并以某种方式帮助。 你一定要找到那些硬边到你的对象图去真正的集合体。



文章来源: DDD: one-to-many relationship between user aggregate root and almost all entities in other aggregates