共享某些实体时识别聚合?

Identifying Aggregates when some entity is shared?

假设我们有一个简单的数据结构:

InterfaceNetwork Printer 都有 EndPoint,它存储在不同的 table 中(强制执行 FK)。例如,Interface 要求 EndPoint’s 端口号介于:1000-2000 和 Network Printer 要求端口号介于:2000-3000 之间。这让我觉得 EndPoint 不能成为聚合根,因为我们真的不需要直接访问它,我们不想在不知道其上下文的情况下直接更改端点值。 Per this post:如果某物属于一个聚合,则其他聚合可能会将其作为只读数据引用。是不是说EndPoint不能属于InterfaceNetwork Printer?或者它仍然可以,就像我的情况一样,相同的 EndPoint 实例 永远不会在两个聚合之间共享 。所以 InterfaceNetwork Pritner 总是会更新自己的 EndPoint 并且不会发生一致性冲突?听起来对吗?

您没有解释您的域,但对我来说 EndPoint 听起来根本不像一个实体,而是一个值(不可变)。更改终点只需将整个旧 EndPoint 值替换为新值即可。不可变值可以在聚合实例之间共享而不会出现问题,因为它们无法更改。

不过,如果 EndPoint 必须是一个实体,那么只要 实例 不在聚合之间共享就可以了。在多个聚合中使用相同种类的实体没有限制。