【问题标题】:Validation and Bugfixing in CQRSCQRS 中的验证和错误修复
【发布时间】:2011-04-19 22:41:26
【问题描述】:

我了解了 CQRS 的一般概念,但在超越示例代码和幻灯片来处理现实世界的问题时,我有几个问题。

  1. 验证

    当您需要对涉及检查数据库值的命令进行验证时,您会怎么做? 注册一项服务,我必须输入一个唯一的电子邮件地址。我听到的一个论点是,用户不太可能输入重复的电子邮件地址,因此只需在处理命令时处理它并向他们发送一封电子邮件说“对不起”,或者可能建议他们重置密码。因此,为了验证,此过程避免了读取模型。但是您如何处理命令处理程序中的重复案例?你怎么知道它是重复的?检查读取模型?您不妨一开始就使用它以获得更好的可用性。

  2. 功能更改/修复错误

    当您需要更改命令的工作方式或修复错误时会发生什么?在仅附加的哲学中,我该如何处理所有旧命令和命令处理程序?我不能将它们重命名为 _legacy 并将它们隐藏起来,否则我的事件反序列化将不起作用。有什么优雅的解决方案可以解决这个问题?

谢谢

【问题讨论】:

    标签: cqrs


    【解决方案1】:
    1. 请参阅 http://codebetter.com/blogs/gregyoung/archive/2010/08/12/eventual-consistency-and-set-validation.aspx 和 cqrs 邮件列表,了解有关此主题的各种讨论。
    2. cqrs 邮件列表中也讨论了事件版本控制(不需要与事件版本控制相同意义上的命令版本控制)。重播事件以获取聚合的当前状态,而不是命令。这样您的功能就可以发展。没有办法改变过去,但有办法改变现在/未来。在奇怪的情况下,您必须以不同的方式开始跟踪状态,提供明确的命令。对于事件的新属性,只需像为新数据库列提供默认值一样。如果这些新值基于已经存在的状态,则为显式命令建模以预先计算它们。优点是您可以异步执行此操作,而数据库升级也会迫使您更改代码。最好在 cqrs 邮件列表中询问这将如何工作。 一个警告!不要轻视事件溯源。您只需使用 CQRS 即可。我看到人们在大多数时候 CQRS 都可以切换到 CQRS+ES。

    所以请访问 groups.google.com/group/dddcqrs 并获得帮助。另一个有用的资源是 cqrsinfo.com

    【讨论】:

      猜你喜欢
      • 2012-06-10
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多