首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CQRS和验证

CQRS和验证
EN

Software Engineering用户
提问于 2013-07-12 21:56:36
回答 2查看 431关注 0票数 5

我开始在CQRS概念中介绍自己,但我遇到了以下情况: Supouse您有一个必须具有唯一名称的实体。为了验证这一点,在创建实体之前,您必须进行查询,因此您正在验证对查询子系统的验证。但是,如果命令系统和查询系统之间还没有发生同步,会发生什么情况呢?另一个客户刚刚在你之前发了同样的名字。在这种情况下会发生什么?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2013-07-12 22:28:46

那么,您不应该使用查询子系统进行验证--为此使用命令子系统。查看福勒的文章中的图片--验证通常放在命令模型一侧。例如,如果您试图给一个实体一个唯一的名称,如果该名称以前已经使用过,那么您的命令子系统应该抛出一个异常。该命令的发起者应该期望这种情况发生,即使他以前使用查询子系统来查找“空闲”名称。

当然,对于这些不同模式之间的“最终一致性”而言,在同步之间存在延迟。如果您有一个系统,其中两个模型严格保持一致,规则可能会明显不同。

票数 3
EN

Software Engineering用户

发布于 2015-12-11 04:06:27

这里有两种可能的补救办法。

首先是种族条件不存在。如果您是以业务速度(通常是运行时间较长的流程)操作,您通常会发现,竞争不是真的发生(所以您不应该在试图处理它们上投入太多精力),或者是允许竞争,并且有用于补救意外情况的补偿命令。

第二种方法:如果唯一的名称约束确实是一个需要维护的业务不变条件,那么负责创建的实体需要确保名称的唯一性--例如,通过维护所有正在使用的名称的列表。客户端尽最大努力防止重复,首先检查读取端,以检测名称是否已在使用;但在两个不同客户端进行竞争时,其中一个命令会失败,而输掉竞争的客户端将被告知失败并选择另一个名称。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/204673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档