我什么时候将我的数据保存在非事件源 CQRS 代码库中

When do I persist my data in a non event-sourcing CQRS code base

我正在基于 CQRS 模型开发 C# 架构。通过我遇到的示例,我很难理解的是何时保留我的数据。

在某些示例中,包括 Microsoft 自己的 items/cart 示例,他们将项目添加到总线或他们用来在命令外传输数据的任何机制中。

在其他示例中,该命令包含持久性,通常说明如果尝试保存失败,则每个人都会执行 're-trigger' 命令并再次尝试保存。虽然这个论点有道理,但这不会限制可能发生的 'transactional' 行动的数量吗?

在我从事的一个项目中,我们会在命令和事件在 CommandHandler 或 EventHandler 中处理后立即保留它们。此外,命令和事件包含以非规范化方式(JSON/AVRO 格式)读取的模型,例如,一旦处理了新的 command/event,就会更新新信息。在流程结束时,结束事件包含完整的读取模型。 这样做的另一个重要方面是,您可以根据之前成功处理的 commands/events 重试处理特定的 command/event。