CQS和CRUD操作

时间:2014-03-16 17:48:33

标签: crud cqrs command-query-separation

我在高可扩展性网站上工作以进行学习。我决定使用CQS模式和CQRS的一些想法。我有单独的写入和读取层,由命令处理程序和事件处理程序使用,系统从消息总线(两个单独的消息总线)发送和接收。

我在处理命令时遇到了一些问题。我读到这个命令不应该返回任何东西。现在重点是:例如,我有一个表单,用户可以创建一个事件或例如更改他的个人资料(照片或名称)中的内容。用户点击保存后,我想向他展示,他的个人资料或在他的墙上添加一个新事件。但是,当命令仅发送到总线时,我怎么知道他的配置文件已经更新?我如何连接命令和CRUD操作的想法?或者可能是这个错误的想法?

2 个答案:

答案 0 :(得分:1)

只需在假设命令成功的情况下更新te UI - 大部分时间都会这样做。

如果用户输入需要验证,您可以在用户输入或选项卡时运行验证,以增加命令成功的可能性。

答案 1 :(得分:1)

首先,拆分不应该在命令和事件之间,而应该在域和读取模型之间。尽管系统中的大多数命令都会更改存储库的状态,但您无法将CQRS命令实际映射到CRUD操作。我将概述一下这是如何工作的。假设您要添加用户,则创建命令AddUserCommand并为该消息分配id。在后端,你有一个该命令的处理程序,你是对的,命令不会返回任何内容。处理完该命令后,您应该发布反映更改的事件和事件:UserWasAddedEvent。此消息的ID将是唯一的,但它可以并且应该具有与您在UI中创建的命令相关的id。您的读取模型应该处理事件并使用命令状态(waiting,processing,completedOnError,completedSuccessfully)更新读取模型,具体取决于您发布的事件。在您提交命令后的UI上,您应该开始使用您创建的命令的ID来查询读取的模型以获取状态,然后根据需要更新您的UI。

您对CQRS处理程序返回无效的权利,但您应该记住,通常在这样的体系结构中,后端应该返回提交命令的验证结果,而不是处理程序本身,而是围绕cqrs处理程序的基础结构。< / p>