我刚刚了解了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发送请求/响应,是否值得开销?
编辑我在命令结束时需要的数据是,我的读写模型目前是相同的。我知道将来我可以为命令应用写模型,为查询应用读模型,此时返回命令所写的数据不再有意义。
答案 0 :(得分:2)
命令处理程序可以返回结果(ok,error,some data),但是如果你使用的是服务总线,那么处理程序可以在后台工作程序中执行,并且没有人处理结果。
在您的情况下,我认为命令处理程序由服务器端控制器直接执行,因此您可以返回结果。但是,如果您期望的结果需要与命令无关的查询,那么最好使用不同的查询。
如果结果包含命令数据本身,则可以将其返回。
顺便说一下,你问的是CQS,而不是CQRS,在某种程度上它仍然是单一的责任原则,但是以更专业的形式。