有没有一种方法可以在CQRS中组合查询和命令?

时间:2019-06-10 08:30:11

标签: events cqrs

我有一个使用CQRS构建的项目,但是我不知道如何实现一个用例。

用户需要能够进行查询,该查询将返回一组数据供他们查看。但是,我还需要保存他们同时获得的数据。

有没有一种方法可以在查询中做到这一点而又不违反CQRS的原则?还是查询和命令需要一个接一个的两个单独的API调用?

3 个答案:

答案 0 :(得分:1)

在CQRS中,您的客户既可以执行命令,也可以执行查询。该客户端不是必需的UI。

它可以是一个API终结点处理程序,它将

  • 接收查询
  • 将其转发到查询端点
  • 等待答案
  • 向呼叫者发送答案
  • 发送命令以存储答案

答案 1 :(得分:0)

  

有没有一种方法可以在查询中做到这一点而又不违反CQRS的原则?

要视情况而定。

如果“保存数据”的意思是“对域模型进行一些更改” ...那么,那将很奇怪。

  

提出问题不应改变答案。 -Bertrand Meyer

另一方面,日志记录/遥测是跟踪应用程序活动的非常普通的方法,所以应该没事。

在不可靠的网络上,您需要注意一些realities of a distributed system(如果遥测系统不可用,该怎么办?记录未实际到达的查询的后果是什么?客户端(因为网络不可靠)。

答案 2 :(得分:0)

正如@VoiceOfUnreason所说,在查询数据时影响域更改可能有些奇怪。

但是,可能是您可以将其扫视一下。

例如,也许可以查询各种预测。我们希望存储该预测。然后,好像查询导致我们不得不保存结果。这似乎在某种程度上破坏了CQS,因为每个查询都会导致状态改变。

如果我们四处搜寻,然后首先通过域处理请求预测,然后 产生结果,甚至是结果的 pointer ,则查询将是您可以多次处理数据而又不会“破坏” CQS的功能。

相关问题