我可以从CQRS命令返回状态吗?

时间:2015-08-06 17:06:39

标签: architecture cqrs

我刚刚了解了CQRS并且一直在分析我现有的代码,寻找我违反或应用CQRS的地方。

到目前为止,我还没有找到任何查询正在改变状态的地方。 但是,许多命令修改状态并返回表示更新状态的数据对象 例如:角度客户端向/api/message.post发出HTTP请求。用户的id由HTTP服务器附加到请求(基于HTTP头)并传递给处理message.post命令的微服务。命令处理程序的结果是{ok: false}{ok: true, message: {_id: "xyz", text: "new" ...}},HTTP服务器将响应对象从微服务代理回Angular。

从命令返回状态是否违反CQRS?
我应该从命令中仅返回“ok:true / false”,然后再发出第二个请求以获取新消息吗?如果是这样,为什么? 如果通过浏览器的http发送请求/响应,是否值得开销?

编辑我在命令结束时需要的数据是,我的读写模型目前是相同的。我知道将来我可以为命令应用写模型,为查询应用读模型,此时返回命令所写的数据不再有意义。

1 个答案:

答案 0 :(得分:2)

命令处理程序可以返回结果(ok,error,some data),但是如果你使用的是服务总线,那么处理程序可以在后台工作程序中执行,并且没有人处理结果。

在您的情况下,我认为命令处理程序由服务器端控制器直接执行,因此您可以返回结果。但是,如果您期望的结果需要与命令无关的查询,那么最好使用不同的查询。

如果结果包含命令数据本身,则可以将其返回。

顺便说一下,你问的是CQS,而不是CQRS,在某种程度上它仍然是单一的责任原则,但是以更专业的形式。