Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Akka 需要DB调用的CQRS命令验证_Akka_Domain Driven Design_Cqrs_Akka Persistence - Fatal编程技术网

Akka 需要DB调用的CQRS命令验证

Akka 需要DB调用的CQRS命令验证,akka,domain-driven-design,cqrs,akka-persistence,Akka,Domain Driven Design,Cqrs,Akka Persistence,在CQRS中,验证需要DB调用的命令的最佳方法是什么? 例如,我的Orderaggregate正在验证一个命令,比如说committer,除非有足够的库存,否则我不想接受这个命令。 在这种情况下,命令处理程序如何检查我是否有订单项的库存?我可以从写端查询读端吗 注意:我正在使用akka进行实现如果聚合需要查询读取模型以执行规则验证,那么通常的方法是通过域服务来实现——您向服务传递一个指定查询契约的接口,该契约的实现将运行查询 但是,您需要注意这样一个事实:运行查询得到的答案是旧的;不能假定存储在

在CQRS中,验证需要DB调用的命令的最佳方法是什么? 例如,我的
Order
aggregate正在验证一个命令,比如说
committer
,除非有足够的库存,否则我不想接受这个命令。 在这种情况下,命令处理程序如何检查我是否有订单项的库存?我可以从写端查询读端吗


注意:我正在使用akka进行实现

如果聚合需要查询读取模型以执行规则验证,那么通常的方法是通过域服务来实现——您向服务传递一个指定查询契约的接口,该契约的实现将运行查询

但是,您需要注意这样一个事实:运行查询得到的答案是旧的;不能假定存储在另一个聚合中的数据是“最新的”

你也应该仔细检查你的要求;在许多领域,即使库存当前不可用,也希望接受订单。毕竟,订单是一个增加商业价值的机会;你不想因为一个无关紧要的问题而否决它。当业务部门已经了解如何缓解“缺货”异常时,尤其如此

记住,来自其他聚合的数据是过时的——系统的另一部分目前正在更新库存水平,以便您可以接受订单,这是完全可能的


如果您不能在没有库存时放松提交订单的要求,并且如果使用陈旧查询数据的错误率高得令人无法接受,然后,您需要重新设计聚合,以便当前库存水平与订单提交处于相同的一致性边界。

命令可以执行查询,但查询不能执行命令hanks for answer。是的,我同意你关于实际业务需求和陈旧数据的看法。我的问题是一个设计问题,最终您将遇到从写到读的查询问题。所以我害怕朝着一个最终让我陷入依赖纠缠的方向前进。将命令验证推送到一个独立的服务(在写端和读端之间进行协调)怎么样?如果是这样的话,这个传奇可以被使用吗?或者我需要创建另一个服务,并将这个传奇仅用于工作流?