我是 CQRS 的新手,我想了解写入端(域)内的业务规则验证。我知道客户端验证应该根据有效日期(必填字段、字符串长度、有效电子邮件等)进行,业务规则/业务域相关验证应该在域端进行。实际上,同样的客户端验证规则也应该应用于域中的命令,因为我们不信任用户。
因此,我们有一个有效的命令 (AddEmailToCustomer),并且在该命令上调用了命令处理程序。这是我的验证方法。
- 在命令处理程序中创建两个命令验证器的实例。
- 第一个验证与客户端验证相同的命令数据(必填字段、有效电子邮件等)
- 第二个验证器根据第二个验证器内的逻辑验证数据。诸如“此客户是否活跃”之类的东西,或者其他什么。我知道不断变化的电子邮件不适合这里,但这并不重要。重要的是这里有一个业务验证。
- 我们查看 Validator.Validate(ICommand cmd) 返回的 ValidationResult 发现有错误
- 我们不会让存储库中的客户调用 AR 上的 UpdateEmail 方法。那么此时我们该怎么做呢?
我是否在命令处理程序中抛出异常并在那里添加这些错误?我是否将命令发送到错误队列或其他地方?我是否会回复 Bus.Reply 之类的内容并返回错误代码?如果是这样,我该如何处理错误消息?如何将这些错误传达给用户?我知道我可以稍后通过电子邮件发送给他们,但在 Web 场景中,我可以在命令中发送请求 ID(或使用消息 ID),并使用请求 ID 轮询响应并向用户显示错误消息。
感谢您的指导。
谢谢