Rom*_*man 7 domain-driven-design cqrs
我一直在关注CQRS,但是我发现它在显示命令结果时会受到限制,例如Web应用程序.
在我看来,使用CQRS,人们不得不刷新整个视图或部分视图以查看更改(使用第二个请求),因为原始命令请求将仅存储将来要处理的事件.
在Web应用程序中,Command请求是否可以将其创建的事件的结果返回给浏览器?
这个问题的标题的答案很简单:没有,无效或从webbrower/rest观点200 OK,空体.
应用于系统的命令(如果成功提交更改)不会产生结果.如果您希望将业务逻辑留在服务器端,是的,您需要通过执行另一个请求(查询)到服务器来刷新数据.
然而,大多数情况下,你可以摆脱服务器的第二次往返.拿一张表来修改一行,然后按一下保存按钮.你真的需要更新表吗?或者,如果用户在博客帖子上提交评论,则只需将评论附加到dom中的其他评论而不进行往返.
如果您发现自己想要从服务器返回修改后的状态,则需要仔细思考您要实现的目标.大多数场景都可以更改,因此简单的200 OK就足够了.
更新:关于排队传入命令的问题.不建议传入的命令排队,因为这可能会返回误报(命令已成功接收并排队,但当命令尝试修改系统状态时失败).该规则有一个例外,即如果您的系统仅将附加模型作为状态.如果命令有效,则可以安全地将系统状态的变化排队到以后.
Udi Dahans的文章Clarified CQRS总是很好地阅读这个主题http://www.udidahan.com/2009/12/09/clarified-cqrs/