1

在 CQRS 中,如何确保命令处理程序以事务方式更新写入存储和读取存储?

我不确定这两个步骤是否应该是一个交易?还是您在这里依赖最终的一致性?这意味着读取存储最终会更新吗?

使用 NServiceBus 5 或 6 的(或一种)常用方法是什么?

在我们的应用程序中,我们有IRepository<T>(Add, Update) 用于命令端来更新 Sql Server 数据库。查询方面很简单。实体框架之上的数据库和外观DbContext

命令方面的步骤是:

  1. MVC 控制器从 View 接收数据
  2. 控制器操作创建一个命令/消息对象并将其发送到总线。
  3. 适当的命令处理程序创建适当的域对象并对其进行验证。
  4. 如果有效,则使用 IRepository 插入或更新数据库。
  5. 怎么办?

这是否必须是 NServiceBus 中的 Saga,其中第 1 步和第 2 步更新命令存储和读取存储?

谢谢你。

4

1 回答 1

1

我看到的流程如下:

  • 控制器接收动作并在命令总线中发出命令
  • 正确的命令处理程序被触发并且写入模型得到更新
  • 在命令处理程序中,触发了一个事件
  • 正确的事件处理程序被触发并更新读取模型

因此更新读取模型在事件处理程序中完成 - 因此最终的一致性

希望这可以帮助!祝你好运!

于 2015-10-14T19:52:16.307 回答