【发布时间】:2019-11-20 14:28:51
【问题描述】:
假设我们有一个聚合类 A 和实体类 B 和实体类 C,使用事件溯源和 AggregateMember 与 ForwardMatchingInstances。
创建了 2 个聚合 A,ID 为 aId1 和 aId2。
我们发送一个命令,将 B 类的新实体添加到 aId1,id 为 bId1
我们发送一个命令,将 B 类的新实体添加到 aId1,id 为 bId2
现在出于某种原因,我们希望将其中一个实体移动到另一个聚合中,因为业务逻辑具有 B 类型实体的特定逻辑(对于 C 也是如此)。
轴突可以支持吗? -> 我们可以在不改变 bId1 的情况下将实体 bId1 移动到聚合 aId2(保持相同的 id,只是移动聚合)。
为此,我会使用 saga 来确保:
- 首先检查 bId1 是否可以移动到 aId2,会发出一个事件(如 ReservedXXXEvent)
- Saga 向 aId1 发送命令以从 aId1 中删除 bId1,aId1 发出事件
- Saga 等待事件然后向 aId2 发送命令以添加 bId1,aId2 发出事件然后 saga 结束
本应转到 aId1 并对 bId1 执行操作的待处理命令会发生什么情况? (不再存在例外?)
在进行更改后,是否将 bId1 的新命令发送到聚合 aId2(bId1 现在在聚合 aId2 中,具有相同的实体 ID)?
【问题讨论】: