使用非聚合事件测试Axon聚合的行为

时间:2019-11-05 03:03:09

标签: domain-driven-design cqrs axon

我正在尝试确保聚合字段在创建时是唯一的。我正在尝试通过使用以下流程来处理投影的最终一致性:

  1. 命令创建一个新的聚合
  2. 汇总问题创建事件
  3. 事件处理程序尝试实现投影,如果存在唯一性违规,它将发出UniqueConstraintViolationEvent
  4. 聚合消耗此事件并将其自身标记为已删除

我正在尝试使用AggregateTestFixture对此进行测试,但是它似乎不允许您在不发出命令的情况下执行任何断言(whenThenTimeElapses似乎允许断言,但是我得到了断言聚合时已删除NPE)。有没有一种方法可以在这种情况下使用测试治具,或者不是为了解决非汇总事件而设计的。如果没有,是否还有另一种方法来验证聚合已被删除?

我不确定这实际上是正确的方法。我还考虑过在(3)中分派命令或使用传奇来管理交互。如果我调度命令而不是事件,似乎只是迫使我编写更多样板文件以从聚合中发出UniqueConstraintViolationEvent。同样,如果我使用传奇来建模此交互,则我不确定如何在不让投影实现器发出传奇消耗的成功事件的情况下结束传奇的生命周期。

1 个答案:

答案 0 :(得分:0)

您正在研究基于集合的验证方案,该方案在处理CQRS系统时比较麻烦。 blog很好地解释了您的一些选择,因此我从那里选择。

作为一种准则,请注意,聚合维护这是自己的一致性边界。因此,不主张通过在整个聚合集合中声明唯一性来扩展该边界。简而言之,不是一个聚合实例的问题。

因此,我将在发出命令之前通过咨询包含所需约束的轻量级查询模型来执行此唯一性检查。