6

根据我的阅读,CQRS 设计涉及异步命令,其中命令被放入队列中。用户假设一切正常,UI 轮询或通过计时器得到一些反馈,如果一切正常或不正常。

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

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

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

也许有更好的方法来做到这一点。

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

4

2 回答 2

5

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

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

如果您想向所有用户展示系统的当前状态,那么您的 ui 将不得不完成您关心的所有工作;这并不是 CQRS 独有的。

于 2012-06-24T16:24:06.110 回答
3

您可以很好地使用同步命令。CQRS 不需要异步命令。

于 2012-06-24T15:21:15.820 回答