测试Axon具有非聚集事件的聚集行为

问题描述 投票:1回答:1

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

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

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

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

domain-driven-design cqrs axon
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.