我了解了 CQRS 的一般概念,但是当涉及到超越示例代码和幻灯片来处理现实世界的问题时,我有几个问题。
验证
当您需要对涉及检查数据库值的命令进行验证时,您会怎么做?注册一项服务,我必须输入一个唯一的电子邮件地址。我听到的一个论点是,用户不太可能输入重复的电子邮件地址,因此只需在处理命令时处理它并向他们发送一封电子邮件说“对不起”,或者可能建议他们重置密码。因此,为了验证,此过程避免了读取模型。但是您如何处理命令处理程序中的重复案例?你怎么知道它是重复的?检查读取模型?您不妨一开始就使用它以获得更好的可用性。
功能更改/修复错误
当您需要更改命令的工作方式或修复错误时会发生什么?在仅附加的哲学中,我该如何处理所有旧命令和命令处理程序?我不能将它们重命名为 _legacy 并将它们隐藏起来,否则我的事件反序列化将不起作用。有什么优雅的解决方案来处理这个问题?
谢谢