根据我的阅读,CQRS设计涉及将命令放入队列的异步命令。用户假设一切正常并且UI轮询或通过计时器获得一些反馈,如果一切正常工作。
如果我有一个用户界面,我在树中拖动文件夹,这将如何工作?我可以让一个用户删除一个文件夹,而另一个用户拖动一个文件夹(使其成为它的子文件夹)。
因此,从UI我可以显示拖动已经发生,然后从一些计时器检查,看看我的读取模型是否已更新(即检查拖动文件夹的父文件夹,如果设置正确,我知道它已经奏效了。
如果用户已经完成了许多拖动操作,我将不得不在UI中保留这些操作的列表并检查读取存储(从列表中删除任何成功的命令)。
可能有更好的方法来做到这一点。
它似乎在UI上做了很多工作而且更容易出错,而如果我只是运行同步命令并且如果一切正常,那么我将进入下一步操作。
答案 0 :(得分:5)
虽然您可以使用同步命令,但它不会使您描述的问题变得更少;通知用户时,它只会意味着略有不同的行为。
要实现命令的事情是它们可以被域对象拒绝。在这种情况下,这可能意味着第一个用户进行了更改,然后第二个用户所做的更改可能会被拒绝,因为它们引用了无效状态。
如果你想向所有用户展示系统的当前状态,你的ui将不得不做你所关心的所有工作;这并不是CQRS独有的。
答案 1 :(得分:3)
您可以很好地使用同步命令。 CQRS不需要异步命令。