我想使用 Axon 框架实现 CQRS 和 ES
我有一个非常复杂的 HTML 表单,它代表了包含六个步骤的招聘流程。
ES 将有助于生成选定日期的历史统计数据并跟踪形式的变化。
管理员始终可以执行多项操作:
- 指定负责每个步骤的人员
- 为每个步骤提供注释
- 每一步都接受或拒绝候选人
- 打开/关闭短信或电子邮件通知
- 分配标签
表单更新(仅区别)从 UI 应用程序发送到后端。
假设我只想对服务器端应用程序进行更改,问题是什么应该是命令,什么应该是事件,我考虑三个选项:
- 表单补丁是一个生成的命令
Form Update Event
- 该解决方案的缺点是每个事件处理程序都需要检查表单中的更改是否引用了此处理程序 ex。如果应该发送关于拒绝的电子邮件
- 表单补丁是一个生成多个事件的命令,例如:。
Interviewer Assigned, Notifications Turned Off
,Rejected on technical interview
- 该解决方案的缺点是可能会生成一些事件,而其他事件则不会因为打破约束例如:
Notifications Turned Off
将成功但Interviewer Assigned
由于分配未经授权的用户而失败。也许我应该在命令生成之前检查所有约束?
- 该解决方案的缺点是可能会生成一些事件,而其他事件则不会因为打破约束例如:
- 表单补丁转换为几个命令 ex:
Assign Interviewer
,Turn Off Notifications
每个命令生成事件 ex:Interviewer Assigned, Notifications Turned Off
- 此解决方案的缺点是某些命令可能会失败,例如:
Assign Interviewer
可能由于分配未经授权的用户而失败。这将导致状态不一致,因为有些事件将存储在存储库中,有些则不会。也许我应该在命令生成之前检查所有约束?
- 此解决方案的缺点是某些命令可能会失败,例如: