Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 从命令模式和CQRS中的命令混淆命令_Design Patterns_Cqrs - Fatal编程技术网

Design patterns 从命令模式和CQRS中的命令混淆命令

Design patterns 从命令模式和CQRS中的命令混淆命令,design-patterns,cqrs,Design Patterns,Cqrs,我认为中的命令与中的命令非常不同,这是对的吗 据我所知,CQRS中的命令是一个没有行为的数据传输对象(DTO)。但是命令模式中的命令本质上只有行为 将命令模式命令称为“处理程序”是否明智。这将使用execute()和undo()方法实现一个Handler接口(因此很明显,我正在实现某种形式的命令模式)。并为CQRS命令保留命令?CQRS中的C具有更改模式的含义,它与命令模式无关,尽管CQRS应用程序也多次使用所述模式。CQR仅指模型:有一个适合更改(域、业务)的模型和一个更简单的用于查询的模型

我认为中的
命令
与中的命令非常不同,这是对的吗

据我所知,CQRS中的命令是一个没有行为的数据传输对象(DTO)。但是命令模式中的命令本质上只有行为

将命令模式命令称为“处理程序”是否明智。这将使用
execute()
undo()
方法实现一个
Handler
接口(因此很明显,我正在实现某种形式的命令模式)。并为CQRS命令保留
命令

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


没有“保留”关键字,当你说CQRS时,每个知道其含义的人都会知道这是关于不同型号的。这些更改可以由得到处理的命令触发,但通常ppl会对所有将更改模型的消息(以及描述所发生更改的所有消息的事件)使用命令。

MikeSW是正确的。CQRS中的“C”与命令模式中的命令不同。命令处理程序也不同于具有“Execute”方法的命令。从本质上讲,处理程序是一个域服务,负责汇集所有需要的内容,以便向域发出命令

另一点需要注意的是,通常一个命令不是DTO,因为它是一个带有getter和setter的属性bucket。它们通常被实现为不可变的类。这使得系统更加可靠和可预测,更易于测试,必要时可以使用多线程

关于这一点的更多信息以及典型CQRS系统各个部分的概览,请查看


希望您觉得这很有用。

“从本质上讲,处理程序是一种域服务”,但并不总是这样。通常是一种应用程序服务。但一般来说,命令处理程序可以被视为服务。我认为任何消息(命令和事件)都是没有任何封装的DTO。