【问题标题】:How do I pretend duplicate values in my read database with CQRS如何使用 CQRS 在我的读取数据库中假装重复值
【发布时间】:2011-06-29 12:57:28
【问题描述】:

假设我的 ReadDatabase 中有一个 User 表(使用 SQL Server)。在常规读/写数据库中,我可以在表上放置一个索引,以确保不会使用相同的电子邮件地址将 2 个用户添加到表中。

因此,如果我尝试为不同的用户添加我的表中已经存在的电子邮件地址的用户,sql server 将抛出异常。

在 Cqrs 中我不能这样做,因为如果我将 readdatabas 的写入与域模型分离,通过将其放在异步队列中,我不会将异常返回给我,我将返回“OK”到UI 和用户会认为他被添加到数据库中,而实际上他永远不会被添加到读取数据库中。

我可以在读取的数据库中进行搜索,检查我的数据库中是否已经有用户使用电子邮件地址,如果有,则通过异常返回 UI。但是如果他们同时按下保存按钮,我将对数据库进行 2 次检查,发现数据库中没有任何用户使用电子邮件地址,我发回说没关系。将它放在我的队列中,稍后它会失败(通过点击唯一标识符)。

我想从我的 EventSource(它是一个 SQL Server)加载所有用户,然后检查那个集合,看看我是否有一个用户已经拥有这个电子邮件地址。这听起来也有点疯狂……

你们是怎么解决的?

我可以看到的方法是不使用异步队列,而是使用同步队列,但这会影响性能非常糟糕,特别是当您有许多“读取存储”要写入时......

这里需要一些帮助...

【问题讨论】:

    标签: cqrs


    【解决方案1】:

    搜索基于 CQRS 集的验证将为您提供此问题的解决方案。

    Greg Young 发布了关于采用最终一致性的业务影响http://codebetter.com/gregyoung/2010/08/12/eventual-consistency-and-set-validation/

    Jérémie Chassaing 发布了关于在域 http://thinkbeforecoding.com/post/2009/10/28/Uniqueness-validation-in-CQRS-Architecture 中发现缺失聚合根的帖子

    相关堆栈溢出问题:

    How to handle set based consistency validation in CQRS? CQRS Validation & uniqueness

    【讨论】:

    • 不是我想要的答案,但它是有道理的。我确实有一个想法,我可以偷看我的队列,看看那里是否有关于使用相同电子邮件地址创建/编辑的用户的信息。
    猜你喜欢
    • 2019-07-01
    • 2013-08-02
    • 2012-02-23
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多