微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用CQRS和事件采购时的唯一性验证

我正在尝试用Event Sourcing实现自己的CQRS基础架构,以更好地学习.作为一个示例项目,我正在实施一个博客引擎,我知道这可能不是一个完美的合适,但我只是想做一些真正的事情.

我现在来的问题是验证.每个帖子都有一个shortUrl,而shortUrl应该是唯一的,但是我应该把这个验证放在域中呢?我知道,在我甚至发送命令之前,我将通过读取我的读取存储来检查它是否是有效的,当创建一个创建post命令或更新post命令时,我将有这个验证.

我可以想到两个“解决方案”.

拥有一个博客聚合,可以跟踪所有博客相关设置,并引用所有的帖子.但是我的眼中的问题是,我必须处理这种情况下的聚合之间的通信,以及每次需要验证一个shortUrl的唯一性时,我需要读取事件存储中的所有事件来创建所有的帖子这似乎很复杂.
>我的第二个替代方案是当事件被触发时,创建读取模型的事件处理程序会发出一个重复的短url事件,当它注意到它将有两个指向不同帖子的短网址.读取模型在检测到错误时触发事件是否有效?

还有更多的选择.请注意,我知道我的域可能不适合cqrs和DDD,但我正在这样做,以便在一个小域中学习.

解决方法

我会去一个只负责生成独特的ShortURL的域服务.您可以使用事务DB来实现此行为.通常,此服务将由BlogPost聚合的命令处理部分使用.如果存在重复的ShortURL,则可以触发DuplicateUrlErrorEvent. 您可以通过使用相同的数据源创建一个瘦的查询模型,从而在UI中预先捕获此内容(但不要百分之百),因此您可以在提交帖子之前查询缩短的URL是否唯一(如@ RyanR的答案所述) ).

原文地址:https://www.jb51.cc/html/230484.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐