GOF中的命令模式与CQRS的含义

时间:2015-05-07 08:41:02

标签: design-patterns cqrs command-pattern

在查看命令模式时发现了一点点差异。可能有些人能够更清楚这一点。

在查看Gang Of Four时,它说每个命令都有一个执行方法,例如:http://www.blackwasp.co.uk/Command.aspx 像:

myCommand.Execute(myValue);

现在,当我查看命令CQRS (Greg Young)中的使用情况时,我发现此命令没有执行方法。它们只是某种“命令指令”实例。 CQRS网络广播中也有类似的内容,例如。

该命令由domainobject处理。 像

class myDomainObject
{
    void UpdateValue(UpdateValueCommand cmd){
        this.value = cmd.value;
    }
}

它是否只是像“CQRS-Command Pattern”这样的另一个CommandPattern定义?因此,在谈论命令时,它可能在“常见”或“cqrs”上下文中有轻微不同的含义?或者我错过了命令模式或CQRS实现的内容?

2 个答案:

答案 0 :(得分:3)

好问题。

原始形式的命令模式就像GOF所说的那样。

在CQRS中,命令只是一个DTO(数据传输对象),因为在大多数情况下,CQRS是使用处理命令的事件或消息总线实现的。在CQRS中,您将命令发送到系统,系统具有某种总线或事件架构,允许自治组件订阅以处理命令;通过这种方式,您可以创建一个责任链,例如,更多SOLID可以使用读写模型。

这是一个chain of responsibility pattern命令模式,但你保留了命令模式的优点,因为你仍然有命令,例如,可以像在命令模式中一样轻松实现UNDO。

link可以帮助您更好地了解CQRS。

答案 1 :(得分:3)

这是由DDD / CQRS讨论小组提出的,Greg Young回答:

  

命令模式有多种定义。

     

您正在查看命令消息模式。唯一的区别是   GoF将命令的处理与Command本身结合起来。如果   在层边界上使用该命令,结果证明是一个   因为你的架构和处理是捆绑在一起的,所以不是那么好主意

https://groups.google.com/forum/?hl=en#!topic/dddcqrs/Yfrt4OqPUD0