所以我对CQS的基本概念感到满意,在这个概念中你可能有一个写入一个数据库的命令,它会更新你读取的查询数据库。
但是,请考虑输入数据的方案,并希望防止重复。
使用新员工数据输入员工注册为例,通过一堆申请表来输入新员工的详细信息:
你现在如何阻止用户再次输入相同的工资单号码,例如,如果他们分心并且不记得他们是否已经键入了一个而且“消息”还没有全部返回查询数据库以供用户搜索?
答案 0 :(得分:1)
数据输入是一个非协作域 - 您没有多个用户对同一个共享数据集执行操作。因此,CQRS并不特别重要。
答案 1 :(得分:1)
首先,您可以轻松使用本地缓存,以确保直接用户不会再次使用相同的数字。这很容易。
但实际上,这并不能阻止两个人同时使用同一个关键数据的错误。正如其他人提到的那样,这是在CQRS之外。这可能发生在几乎任何架构中。
现在CQRS可以改变的主要方面是我们如何应对冲突。我看到两种可能的解决方案:
系统关闭命令然后等待成功结果。如果失败,您只需要提供固定信息并再试一次。从我所听到的一切看来,这似乎都是错误的,甚至可能是一种反模式,虽然我不是那么接近专家的说法。
系统关闭命令并最终通知用户冲突。他们可以在某处解决问题。在您的情况下,输入一个新号码(可能会再次发生冲突)。
答案 2 :(得分:0)
我建议将工作流程更改为此
该步骤应该以原子方式执行。
答案 3 :(得分:0)
您是否可以跟踪客户端上已输入的员工/工资单号码组合的列表?如果这是一个Web客户端,可以是cookie,如果是胖客户端,则是内存或其他。当他们第一次进入系统时,清除列表并重新开始。