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

  • 用户登录
  • 用户输入一些保险详情
  • 用户要求应用决定
  • 用户查看决策结果

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

    问题出在 UI 上,我如何让用户知道正在应用决策,因为在 CQRS 中,读取模型不会“立即”更新,我如何让 UI 显示决策正在进行中,并且将“很快” ' 到达?

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

    最佳答案

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

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

    关于CQRS - 最终一致性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3414277/

    10-11 03:50