我正在尝试使用事件源来实现我自己的 CQRS 基础设施,以更好地学习它。作为一个示例项目,我正在实现一个博客引擎,我知道它可能不是一个完美的选择,但我只想做一些真实的事情。
我现在遇到的问题是验证。每个帖子都有一个shortUrl
,以及shortUrl
应该是唯一的,但是我应该将此验证放在域中的哪里?我知道,在发送命令之前,我会通过从读取存储中读取命令来检查它在创建创建后命令或更新后命令时是否有效,从而进行验证。
我能想到两个“解决方案”。
- Have a
Blog
跟踪所有博客相关设置以及对所有帖子的引用的聚合。但在我看来,这个问题是我必须处理这种情况下聚合之间的通信,以及每次我需要验证一个的唯一性时shortUrl
我需要从事件存储中读取所有事件来创建所有帖子,这似乎很复杂。
- 我的第二个选择是当事件被触发时,当我的事件处理程序注意到它有两个指向不同帖子的短网址时,创建读取模型的事件处理程序会触发重复的短网址事件。让读取模型在检测到错误时触发事件是否有效?
还有其他选择吗?请注意,我知道我的域可能不是最适合 cqrs 和 DDD,但我这样做是为了在小域中学习。
我会选择只负责生成唯一 ShortURL 的应用程序服务。您可以使用事务数据库来实现此行为。通常,此服务将由 BlogPost 聚合的命令处理部分使用。如果存在重复的 ShortURL,您可以触发 DuplicateUrlErrorEvent。
您可以通过使用相同的数据源创建一个瘦查询模型来在 UI 中预先捕获此问题(但永远不会 100%),这样您就可以在提交帖子之前查询缩短的 URL 是否唯一(如 @RyanR 的答案所述) )。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)