在查看命令模式时发现了一点点差异。可能有些人能够更清楚这一点。
在查看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实现的内容?
答案 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