3

我正在实现一个具有 Akka 持久性的 CQRS 系统,并且我正在尝试了解 CQRS 的请求响应位。

关于如何将响应发送回客户端的答案很少,本文还提到了一些好的模式。但是,不要用大词概括,有人可以解释一下我应该如何在 CQRS 中将响应发送回以下简单用例的客户端。

用例

假设用户在显示用户个人资料的页面上,该个人资料显示以下信息

  1. 用户名
  2. 地址
  3. 电话号码

在我的系统中,每个用户都有一个 Actor,用于存储该用户的个人资料信息。

在 UI 上,用户想要更新地址并且发生以下事情:

  1. 用户进行 AJAX REST 调用以更新用户地址
  2. UpdateUserAddressCommand(address:String)生成
  3. UpdateUserAddressEvent(address:String)生成
  4. UserAddressUpdatedEvent(updatedAddress:String)已生成(已更新 UserActor 的状态)

现在如何发回系统中 UserProfile 的完整状态?由于 CQRS 不鼓励发送对命令的响应?

4

1 回答 1

3

对于 CQRS 模式,REST 层可以被认为是使用 CQRS 的系统的客户端,因此您可以在不违反“原则”的情况下发送响应(从 REST 服务器到 Web 浏览器)。

就您而言,这很简单:

  1. REST 调用/api/endpoint/1234-> REST 服务器生成如上的命令。
  2. 服务器返回代码“202 Accepted”并将Location:标头设置为类似/api/user/profile/1234
  3. 客户端查询/api/user/profile/1234以查询UserProfile.

如果您使用异步查询端更新/最终一致性,则可以将 3. 与 HTTP 长轮询结合使用。

于 2015-10-18T13:54:32.553 回答