假设我的 ReadDatabase 中有一个 User 表(使用 SQL Server)。在常规读/写数据库中,我可以在表上放置一个索引,以确保不会使用相同的电子邮件地址将 2 个用户添加到表中。
因此,如果我尝试为不同的用户添加我的表中已经存在的电子邮件地址的用户,则 sql 服务器将抛出异常。
在 Cqrs 中我不能这样做,因为如果我将我的 readdatabas 的写入与域模型分离,通过将其放在异步队列中,我不会将异常返回给我,并且我将向 UI 返回“OK”并且用户会认为他被添加到数据库中,而实际上他永远不会被添加到读取数据库中。
我可以在读取的数据库中进行搜索,检查我的数据库中是否已经有用户使用电子邮件地址,如果有,则通过异常返回 UI。但是,如果他们同时按下保存按钮,我将对数据库进行 2 次检查,发现数据库中没有任何用户使用电子邮件地址,我发回说没关系。将它放在我的队列中,稍后它将失败(通过点击唯一标识符)。
我是否想从我的 EventSource(它是一个 SQL Server)加载所有用户,然后检查该集合,看看我是否有一个用户已经拥有这个电子邮件地址。这听起来有点疯狂,我也...
你们是怎么解决的?
我可以看到的方式是不使用异步队列,而是使用同步队列,但这会影响性能非常糟糕,特别是当您有许多“读取存储”要写入时......
在这里需要一些帮助...