删除聚合后处理异常的正确方法

时间:2018-08-16 13:54:09

标签: cqrs event-sourcing axon

使用markDeleted()方法删除聚合后,使用相同的聚合标识符处理请求的正确方法是什么?

markDeleted()方法标记并聚合为已删除,然后使用相同的聚合标识符尝试创建事件时,将引发异常。

这只是尝试/捕获的情况吗?

如果我需要更清楚一点,请告诉我。

预先感谢

P.S)嗨,阿拉德! :)

1 个答案:

答案 0 :(得分:2)

我建议不要重用已删除的Aggregate实例的Aggregate Identifier。

在执行此类操作时,Axon可以采用两种方式:  1.旧的Aggregate Identifier在将实例化Aggregate的Command中重用(我喜欢将其称为“构造函数命令处理程序”)。在这种情况下,事件存储引擎中会引发异常,表明给定事件已存在。  2.将旧的聚合标识符重用于执行某些决策的命令。换句话说,此命令将具有@TargetAggregateIdentifier批注与旧的聚合标识符绑定。在这种情况下,聚合将是事件源的(假设您正在进行事件搜索),直到将聚合标记为“已删除”的事件为止。然后,您会再遇到一个异常,说明这是不正确的行为。

如果您真的需要重用该聚合标识符,则必须删除已删除的旧聚合的事件;很可能不是您想做的事情。

因此,最好使用UUID,它(几乎)可以保证您具有唯一的聚合标识符。 这样一来,您就可以安全地将聚合标记为已删除,并且在此空间中不会因处理异常而烦恼。

P.S。我为你向阿拉德打个招呼。