2010-10-01 62 views
5

我得到CQRS的一般概念,但是当涉及到超越示例代码和幻灯片套件以处理现实世界问题时,我有几个问题。CQRS中的验证和错误修复

  1. 验证

    当你需要做的是包括从数据库检查值的命令的验证,你会怎么做? 注册服务,我必须输入一个唯一的电子邮件地址。我听到的一个说法是,用户不太可能输入重复的电子邮件地址,所以在处理命令时给他们发送一封说“抱歉”的电子邮件,或者建议他们重置密码。这个过程因此避免了为了验证而具有读取模型。但是,你如何处理命令处理程序中的重复案例?你怎么知道它是重复的?检查一个readmodel?你可能首先使用它来获得更好的可用性。

  2. 功能更改/修正错误

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

感谢

回答

4
  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