7

我有以下需要按照 CQRS 模式实现的场景:

  1. 用户登录
  2. 用户输入一些保险细节
  3. 用户要求做出决定
  4. 用户查看决策结果

这看起来相当简单,但是我的问题在第 3 步和第 4 步之间,在第 3 步中,我发送了一个ApplyForDecision命令,该命令将从承保服务处获得决定,然后将具有该决定结果的事件发送到 BUS 以供读取存储稍后使用它并使用决策结果更新视图表。

问题出在 UI 上,我如何让用户知道正在应用该决定,因为在 CQRS 中,读取模型没有“直接”更新我如何让 UI 显示一个决定正在进行中并且“很快” ' 到达?

我还需要让用户能够注销并重新登录,因为该决定可能尚未应用,如何让 UI 显示“待决决定屏幕”?

4

2 回答 2

7

答案是立即引发一个表明已申请决定的事件,更新读取的数据库并立即重定向到您的待决决定屏幕,无论读取的数据库是否已被更新。静态文本“待决定将与您联系”或类似的内容。他们可以刷新或稍后返回,并且很可能会获得真实数据。然后,当决​​定做出决定时,您有一个 DecisionMade 事件并相应地更新读取的数据库、发送电子邮件,无论如何。

这就是你必须在 CQRS 中处理的最终一致性的权衡。通常,当我对表单上的域对象属性进行更改时,我会在后端做家务时在用户获得的即时反馈中伪造它。是的,有点难看,但用户不知道。

于 2010-11-25T08:14:10.080 回答
3

恕我直言,解决方案是让您的命令发出“ApplyForDecisionRequested”和“ApplyForDecisionHandled”事件,并相应地更新您的读取模型。

于 2010-09-10T20:15:51.280 回答