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

前端之家收集整理的这篇文章主要介绍了使用CQRS和事件采购时的唯一性验证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试用Event Sourcing实现自己的CQRS基础架构,以更好地学习.作为一个示例项目,我正在实施一个博客引擎,我知道这可能不是一个完美的合适,但我只是想做一些真正的事情.

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

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

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

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

解决方法

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

猜你在找的HTML相关文章