CQRS、事件源和创建记录的 ID

CQRS, Event sourcing and ids of created records

刚开始使用 CQRS 和事件溯源。对于使用过 CQRS 的人来说,这是一个普遍的新手问题。

比如说,我们有一个事件 "userRegistration",我们应该为这个创建的用户创建 Id?我们应该将这个 Id 写入事件数据吗? CQRS建模时通常是怎么做的?

是的,您通常希望在事件数据中包含 ID。侦听 UserRegistered 事件的处理程序可能需要知道您正在处理哪个用户。

任何足够独特的 ID 生成方法都可以。但是您可以从 id 生成是确定性的方法中获益良多;它为您的系统提供了另一种识别重复消息的方法

在这里使用命名的 UUID 是一个可能的答案,确定性的,但碰撞频率足够小,您不太可能 运行 遇到问题。

例如,如果 RegisterUser 命令有一个唯一标识符(很有用,因为它为您提供了另一种识别重复项的方法),那么您可以使用该标识符确定性地为用户生成一个新标识符。