在CQRS中对命令模式和命令的命令感到困惑

时间:2014-12-10 18:18:22

标签: design-patterns cqrs

我认为CQRS中的commandcommand pattern中的命令有很大不同吗?

根据我的阅读,CQRS中的命令是没有行为的数据传输对象(DTO)。但是命令模式中的命令本质上只是 有行为吗?

调用命令模式命令"处理程序"是否明智?哪个将使用Handlerexecute()方法实现undo()接口(因此很明显我正在实现某种形式的命令模式)。并为CQRS命令保留Command

2 个答案:

答案 0 :(得分:2)

CQRS中的 C 具有更改模型的含义,它与命令模式无关,尽管CQRS应用程序很多时候也在使用所述模式。 CQRS仅涉及模型:有一个适用于更改(域,业务)和更简单的查询。

没有'保留'关键字,当你说CQRS时,每个知道其含义的人都会知道它与不同的模型有关。这些更改可以由处理的命令触发,但通常ppl正在使用 Command 来更改模型的所有消息(以及描述所发生更改的所有消息的事件)。

答案 1 :(得分:1)

迈克斯是对的。 CQRS中的“C”与命令模式中的命令不同。命令处理程序也与具有“执行”方法的命令不同。本质上,处理程序是一个域服务,负责将所有需要的内容集合在一起,以便向域发出命令。

另一点值得注意的是,通常命令不是DTO,因为它是具有getter和setter的属性桶。它们通常被实现为不可变类。这使得一个更可靠和可预测的系统更容易测试,并在必要时进行多线程。

有关此内容的更多信息以及对典型CQRS系统各部分的概述,请查看CQRS - A Step-By-Step Guide to the Flow of a Typical Application

希望你觉得有用。