命令必须在CQRS中是异步的吗?

JD.*_*JD. 6 architecture cqrs

根据我的阅读,CQRS设计涉及将命令放入队列的异步命令.用户假设一切正常,UI轮询或通过计时器得到一些反馈,如果所有工作.

如果我有一个用户界面,我在树中拖动文件夹,这将如何工作?我可以让一个用户删除文件夹,而另一个用户拖动文件夹(使其成为文件夹的子文件夹).

因此,从UI我可以显示拖动已经发生,然后从一些计时器检查,看看我的读取模型是否已更新(即检查拖动文件夹的父文件夹,如果设置正确,我知道它已经工作).

如果用户已经完成了许多拖动操作,我将不得不在UI中保留这些操作的列表并检查读取存储(从列表中删除任何成功的命令).

可能有更好的方法来做到这一点.

它似乎在UI上有很多工作并且更容易出错,而如果我只是运行同步命令并且如果一切正常,那么我将进入下一个操作.

aro*_*eer 5

虽然您可以使用同步命令,但它不会使您描述的问题变得更少; 通知用户时,它只会意味着略有不同的行为.

关于命令的实现是它们可以被域对象拒绝.在这种情况下,这可能意味着第一个用户进行更改,然后第二个用户所做的更改可能会被拒绝,因为它们引用了无效状态.

如果你想向所有用户展示系统的当前状态,你的ui将不得不做你所关心的所有工作; 这并不是CQRS独有的.