我正在尝试使用事件溯源实现自己的CQRS基础架构,以便更好地学习它。作为一个示例项目,我正在实现一个博客引擎,我知道它可能不是一个完美的选择,但我只是想在一个真实的项目上工作。
我现在遇到的问题是验证。每篇文章都有一个shortUrl
,而且shortUrl
应该是唯一的,那么在领域模型中应该放在哪里进行验证呢? 我知道在发送创建或更新文章命令之前会通过读取我的读存储来检查是否有效来执行此验证。
我能想到两种“解决方案”:
- 拥有一个
Blog
聚合,用于跟踪所有与博客相关的设置和所有文章的引用。但我认为这种情况下的问题是我必须处理聚合之间的通信,以及每次需要验证shortUrl
的唯一性时,我需要从事件存储中读取所有事件来创建所有文章,这似乎太复杂了。 - 我有的第二个选择是当事件被触发并且我的事件处理程序创建读模型时,如果它注意到将有两个指向不同文章的短链接,那么它会触发重复的短链接事件。在检测到错误时,让读模型触发事件是否有效呢?
是否还有其他选择呢?请注意,我知道我的域可能不是cqrs和DDD的最佳选择,但我正在一个小领域中做这件事来学习。