Java 聚合中的实体能否移动到Axon中的另一个聚合(相同类型)
假设我们有一个聚合类A,有实体类B和实体类C,使用事件源和AggregateMember以及ForwardMatchingInstances 创建了2个聚合A,id为aId1和aId2 我们发送一个命令,向aId1添加一个新的B类实体,id为bId1 我们发送一个命令,向aId1添加一个新的B类实体,id为bId2Java 聚合中的实体能否移动到Axon中的另一个聚合(相同类型),java,events,cqrs,axon,Java,Events,Cqrs,Axon,假设我们有一个聚合类A,有实体类B和实体类C,使用事件源和AggregateMember以及ForwardMatchingInstances 创建了2个聚合A,id为aId1和aId2 我们发送一个命令,向aId1添加一个新的B类实体,id为bId1 我们发送一个命令,向aId1添加一个新的B类实体,id为bId2 现在出于某种原因,我们希望将其中一个实体移动到另一个聚合,因为业务逻辑有一个针对类型B的实体的特定逻辑(与C相同) axon能支持吗?->我们是否可以在不更改bId1的情况下将实
现在出于某种原因,我们希望将其中一个实体移动到另一个聚合,因为业务逻辑有一个针对类型B的实体的特定逻辑(与C相同)
axon能支持吗?->我们是否可以在不更改bId1的情况下将实体bId1移动到聚合aId2(保持相同的id,只移动聚合) 要做到这一点,我将用一个传奇故事来确保:
- 首先检查bId1是否可以移动到aId2,将发出一个事件(如ReservedxxEvent)
- Saga向aId1发送命令以从aId1中删除bId1,aId1发出一个事件
- Saga等待事件,然后向aId2发送命令以添加bId1,aId2发出一个事件,然后Saga结束
对于应该转到aId1并对bId1执行操作的挂起命令,会发生什么情况?(例外情况是不再存在了?)
在进行更改后,bId1的新命令是否发送到聚合aId2(bId1现在在聚合aId2中,具有相同的实体id)?我认为回答这个问题的唯一方法是: axon能支持吗?->我们是否可以在不更改bId1的情况下将实体bId1移动到聚合aId2(保持相同的id,只移动聚合) 不是因为Axon,而是因为CQR和事件来源。您不希望发出包含其中实体状态的事件。 你所拥有的唯一东西就是你的集合“发生了什么”的痕迹。你需要做的是,从商业角度找出“移动”的真正含义 在实现方面,您通常会将其视为添加和删除(以任意顺序)。如果操作失败(可能add无效),您需要能够补偿失败。如果故障是经常发生的,那么是的,“保留并确认”方法比“尝试并补偿”方法要好 在Axon中,您可以使用传奇故事,也可以使用控制器。在后一种情况下,只需发送一个命令,然后根据结果发送第二个命令。当第二个命令返回失败时,您可以补偿第一个命令 请注意,命令永远不会“发送到实体”。它们将根据
@TargetAggregateIdentifier
注释字段(或您配置的命令targetResolver
可能使用的方法)发送到聚合。该字段定义加载的聚合实例。然后,一旦加载了聚合,Axon将定义该聚合中的哪个实体定义实际处理该命令的处理程序
最后一点意见:通常情况下,这些情况取决于许多领域特定的细节。如果没有关于您构建它的领域或案例的任何信息,很难理智地回答这样的问题