共享某些实体时识别聚合?
Identifying Aggregates when some entity is shared?
假设我们有一个简单的数据结构:
Interface
和 Network Printer
都有 EndPoint
,它存储在不同的 table 中(强制执行 FK)。例如,Interface
要求 EndPoint’s
端口号介于:1000-2000 和 Network Printer
要求端口号介于:2000-3000 之间。这让我觉得 EndPoint
不能成为聚合根,因为我们真的不需要直接访问它,我们不想在不知道其上下文的情况下直接更改端点值。 Per this post:如果某物属于一个聚合,则其他聚合可能会将其作为只读数据引用。是不是说EndPoint
不能属于Interface
和Network Printer
?或者它仍然可以,就像我的情况一样,相同的 EndPoint
实例 永远不会在两个聚合之间共享 。所以 Interface
和 Network Pritner
总是会更新自己的 EndPoint
并且不会发生一致性冲突?听起来对吗?
您没有解释您的域,但对我来说 EndPoint
听起来根本不像一个实体,而是一个值(不可变)。更改终点只需将整个旧 EndPoint
值替换为新值即可。不可变值可以在聚合实例之间共享而不会出现问题,因为它们无法更改。
不过,如果 EndPoint
必须是一个实体,那么只要 实例 不在聚合之间共享就可以了。在多个聚合中使用相同种类的实体没有限制。
假设我们有一个简单的数据结构:
Interface
和 Network Printer
都有 EndPoint
,它存储在不同的 table 中(强制执行 FK)。例如,Interface
要求 EndPoint’s
端口号介于:1000-2000 和 Network Printer
要求端口号介于:2000-3000 之间。这让我觉得 EndPoint
不能成为聚合根,因为我们真的不需要直接访问它,我们不想在不知道其上下文的情况下直接更改端点值。 Per this post:如果某物属于一个聚合,则其他聚合可能会将其作为只读数据引用。是不是说EndPoint
不能属于Interface
和Network Printer
?或者它仍然可以,就像我的情况一样,相同的 EndPoint
实例 永远不会在两个聚合之间共享 。所以 Interface
和 Network Pritner
总是会更新自己的 EndPoint
并且不会发生一致性冲突?听起来对吗?
您没有解释您的域,但对我来说 EndPoint
听起来根本不像一个实体,而是一个值(不可变)。更改终点只需将整个旧 EndPoint
值替换为新值即可。不可变值可以在聚合实例之间共享而不会出现问题,因为它们无法更改。
不过,如果 EndPoint
必须是一个实体,那么只要 实例 不在聚合之间共享就可以了。在多个聚合中使用相同种类的实体没有限制。