我知道命令不应该失败,所以我需要在发送之前验证我的命令。
但是,如果两个用户正在更新相同的聚合根并且两者似乎都有效,那么我们就会遇到并发问题。
如何在NEventStore中处理此问题?我的客户是否需要获取他们在保存事件时传递的版本号或提交ID,如果它已更改,那么我会引发异常吗?
答案 0 :(得分:4)
正如您所提到的,管理事物的一种方法是指定当您Load
聚合时期望采取行动的版本(此时会出现重载)。
如果生成的事件与之发生冲突,那么[通过域名]提交阶段将产生ConcurrencyException
: -
确保您执行> 1读取NuGet包放入项目的.doc文件 - 它涵盖了JO EventStore如何处理此问题的基本原理。
为了清晰起见更新注意虽然这一切都有效并且有时是必要的,但一般情况下你会发现[并且作为默认值应该努力到达你可以管理的最开心的地方]通过使您的命令在性质上自然是幂等的和/或在整个系统中使用自然冲突解决机制来解决这些冲突解决方案,以便不需要依靠您的事件存储来提供这样的低级别防护(例如,etags,重试发生冲突时的命令等)。如果您发现自己在实践中走向任何主要学位,我建议您在DDD-CQRS列表中使用足够的实际用例来讨论您的策略。