CQRS 和事件溯源我可以使用自动递增的 INT 作为聚合 ID 吗?

CQRS & event sourcing can I use an auto incremented INT as the aggregate ID?

我正在处理遗留项目并尝试在某些适当的地方引入 CQRS。为了与所有相关的遗留物集成,我想将我的聚合(或其中的一部分)投影到关系数据库中的 table 中。

我还希望聚合 ID 是该投影 table 的自动增量值。我知道这似乎有悖常理,因为它混合了读取模型和写入模型。但是我不想用外键 GUUID 污染旧架构。

这完全是禁忌吗?如果是,您有什么建议?

编辑:也许我可以只将 GUUID 存储在投影 table 中,这样当事件被投影时我可以识别要更新的行,但仍然有一个自动递增的列用于加入?

使用基础结构层为您的实体创建的 ID 没有任何问题。这种模式在Vaughn Vernon's 'Implementing DDD'本书中常用:

  1. 从存储库中获取下一个可用 ID。
  2. 创建实体。
  3. 将实体保存在存储库中。

你的问题是你想使用在另一个限界上下文中创建的 id。这是一个巨大而彻底的禁忌,而不是 id 是由基础设施层创建的事实。

您应该在限界上下文中创建 id 并使用它来引用来自其他上下文的聚合(就像您在编辑问题时所写的那样)。