EventSourcing+CQRS 验证

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

使用 EventSourcing 和 CQRS 时,您的读取模型通常具有最终一致性。假设我们有一个

Customer
实体,它是事件源的,并且该实体具有社会安全号码属性。这个号码必须是唯一的,所以在创建一个新的
Customer
时,我们必须检查这个号码是否还没有被使用过。

进行这种验证的常用方法是什么?我可以看到三个选项:

  1. 加载所有

    Customer
    实体的全部事件,对所有实体进行再水化,然后验证没有人再次使用该号码。

  2. 查询读取模型,但我读到的关于 ES+CQRS 的所有内容都明确表示我们不应该这样做,因为最终一致性。

  3. 只为这些数字创建一个单独的表(最好在事件的同一个数据库中,这样我们就可以将事件和数字保存在同一个事务中,假设它是一个关系数据库)。

如果我们使用关系数据库,选项 3 似乎是最好的选择,因为如果所有事情都发生在同一个事务中,我们就不会受到最终一致性的影响。

对于“获取所有年龄在 30 岁以上的客户”这样的查询,我可以看到同样的情况。除了重建整个流以查询它们或查询读取模型之外,我看不到其他选项。

对此有什么想法吗?

cqrs event-sourcing
© www.soinside.com 2019 - 2024. All rights reserved.