0
我知道数据总是陈旧。CQRS如何处理用户的任务/陈旧的数据
什么是处理工作流任务的方式,例如批准发票。该任务被允许由用户执行一次。当这由异步服务处理时,它可能需要几秒钟(或更长时间)。与此同时,用户可以再次批准相同的发票,因为任务尚未在数据库中更新。
有关此任何想法,赞赏。
我知道数据总是陈旧。CQRS如何处理用户的任务/陈旧的数据
什么是处理工作流任务的方式,例如批准发票。该任务被允许由用户执行一次。当这由异步服务处理时,它可能需要几秒钟(或更长时间)。与此同时,用户可以再次批准相同的发票,因为任务尚未在数据库中更新。
有关此任何想法,赞赏。
域模型必须强制执行一致性。写入侧的模型不应该被认为是陈旧的,只有读取侧的投影。
如果批准事件尚未投影到读取模型中,则无关紧要。但是,如果用户发送基于陈旧数据的无效命令,则域模型需要知道已经发生了批准。
您的域的存储库应始终将聚合根处于其lates状态(无论您是使用事件源还是某些基于状态的持久性作为SQL数据库)。
其他要考虑的事情;如果第二批准命令的最终结果与第一批批准命令的最终结果相同,则不需要抛出错误或拒绝该命令。只需使用该命令,不需要进行任何其他实体更改。 –