Domain driven design 测试轴突聚合';非聚集事件的行为

Domain driven design 测试轴突聚合';非聚集事件的行为,domain-driven-design,cqrs,axon,Domain Driven Design,Cqrs,Axon,我试图确保聚合字段在创建时是唯一的。我试图通过使用以下流程来处理预测的最终一致性: 命令创建一个新的聚合 聚合问题创建事件 事件处理程序尝试具体化投影,如果存在唯一性冲突,它将发出一个UniqueConstraintViolationEvent 聚合使用此事件并将自身标记为已删除 我正试图使用AggregateTestFixture来测试这一点,但它似乎不允许您在不发出命令的情况下执行任何断言(当entimeeFasses似乎允许断言时,但当断言聚合已被删除时,我会得到一个NPE)。有没有一种方

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

  • 命令创建一个新的聚合
  • 聚合问题创建事件
  • 事件处理程序尝试具体化投影,如果存在唯一性冲突,它将发出一个
    UniqueConstraintViolationEvent
  • 聚合使用此事件并将自身标记为已删除
  • 我正试图使用
    AggregateTestFixture
    来测试这一点,但它似乎不允许您在不发出命令的情况下执行任何断言(
    当entimeeFasses
    似乎允许断言时,但当断言聚合已被删除时,我会得到一个NPE)。有没有一种方法可以在这种情况下使用测试夹具,或者它不是设计用来解释非聚合事件的。如果没有,是否有其他方法验证骨料是否已移除


    我不相信这是正确的方法。我还考虑过在(3)中发送一个命令,或者使用一个传奇来管理交互。如果我调度一个命令而不是一个事件,它似乎只是迫使我编写更多的样板文件,从聚合中发出
    UniqueConstraintViolationEvent
    。类似地,如果我使用一个传奇来模拟这种交互,我不确定如何结束传奇的生命周期,而不让投影物化器发出传奇使用的成功事件。

    您看到的是一个基于集合的验证场景,这在处理CQRS系统时有点麻烦。我觉得这很好地解释了你的一些选择,因此我会从中挑选

    作为一种指导原则,请注意聚合保护它自己的一致性边界。因此,通过断言整个集合之间的唯一性来扩展该边界是不可取的。简单地说,这不是单个聚合实例的问题

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