Domain driven design CQRS&;事件源是否可以使用自动递增的INT作为聚合ID?

Domain driven design CQRS&;事件源是否可以使用自动递增的INT作为聚合ID?,domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,我正在从事一个遗留项目,并试图在一些合适的地方引入CQR。为了与所有关系型遗留系统集成,我希望将我的聚合(或其中的一部分)投影到关系数据库中的一个表中 我还希望聚合ID是该投影表上的自动递增值。我知道这似乎有悖常理,因为它混合了读模型和写模型。但是,我不想用外键GUID污染遗留模式 这会是一个完全的否定吗?如果是的话,你有什么建议 编辑:也许我可以将GUID存储在投影表中,这样当事件被投影时,我可以识别要更新的行,但仍然有一个自动递增的列用于加入?使用基础结构层为实体创建的id没有错。本书中通常

我正在从事一个遗留项目,并试图在一些合适的地方引入CQR。为了与所有关系型遗留系统集成,我希望将我的聚合(或其中的一部分)投影到关系数据库中的一个表中

我还希望聚合ID是该投影表上的自动递增值。我知道这似乎有悖常理,因为它混合了读模型和写模型。但是,我不想用外键GUID污染遗留模式

这会是一个完全的否定吗?如果是的话,你有什么建议


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

使用基础结构层为实体创建的id没有错。本书中通常使用此模式:

  • 从存储库中获取下一个可用ID
  • 创建一个实体
  • 将实体保存到存储库中
  • 您的问题是希望使用在另一个有界上下文中创建的id。这是一个巨大而完整的不不不,不是由基础设施层创建id的事实


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

    我认为您已经回答了自己的问题。允许数据库(基础设施的一部分)确定域内的标识违反了CQR(因为您必须执行读写操作才能检索新标识),并且它将应用程序的可伸缩性绑定到数据库。让自己变得简单,使用GUIDs。谢谢,是的,我想我在写下问题后调试并想到了答案!