CQRS 可以查询作为事件源吗?

CQRS can query be source of event?

通常在谈论实现 CQRS 时,假设命令是事件的来源。但是用户进行的查询可以作为事件存储中创建事件的来源吗?或者这样的操作(当我们需要一个反映查询的事件时)仍然应该使用命令来实现?

But can queries made by user be source of created events in event store?

不要向精灵寻求建议,因为他们会回答“否”和“是”。

因此,"no" 部分:查询的特点是它们不更改域模型。在 CQRS 实现中,查询由读取模型提供服务,它甚至可能根本无法访问您的事件存储。

when we need an event that reflects query

是的部分:没有法律规定您不能 assemble 查询历史并将其保存在您的事件存储中。

但我很困惑,因为我没有看到 需要反映查询的事件的明确情况。这真的很奇怪。我的猜测是,需要一个反映查询的事件表明您的模型已损坏。

通过探索需求的来源,您或许可以在这方面取得一些进展。

如果需求来自运营、分析、报告、可用性……那么域模型可能不是该信息的正确位置。

如果需求来自您的领域专家 ("we need to capture these queries so that the model supports the right changes later"),那么您应该确定哪个实体负责跟踪查询的发生,并向该实体发送适当的命令。