2011-10-12 38 views
0

我知道数据总是陈旧。CQRS如何处理用户的任务/陈旧的数据

什么是处理工作流任务的方式,例如批准发票。该任务被允许由用户执行一次。当这由异步服务处理时,它可能需要几秒钟(或更长时间)。与此同时,用户可以再次批准相同的发票,因为任务尚未在数据库中更新。

有关此任何想法,赞赏。

回答

1

域模型必须强制执行一致性。写入侧的模型不应该被认为是陈旧的,只有读取侧的投影。

如果批准事件尚未投影到读取模型中,则无关紧要。但是,如果用户发送基于陈旧数据的无效命令,则域模型需要知道已经发生了批准。

您的域的存储库应始终将聚合根处于其lates状态(无论您是使用事件源还是某些基于状态的持久性作为SQL数据库)。

+0

其他要考虑的事情;如果第二批准命令的最终结果与第一批批准命令的最终结果相同,则不需要抛出错误或拒绝该命令。只需使用该命令,不需要进行任何其他实体更改。 –