【问题标题】:Confused about command from the command pattern and command in CQRS对来自命令模式的命令和 CQRS 中的命令感到困惑
【发布时间】:2014-12-10 18:18:21
【问题描述】:

我认为CQRS 中的commandcommand pattern 中的命令非常不同,这是否正确?

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

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

【问题讨论】:

    标签: design-patterns cqrs


    【解决方案1】:

    CQRS 中的 CChange Model 的意思,它与命令模式无关,尽管很多时候 CQRS 应用程序也使用上述模式。 CQRS 仅指模型:有一个适合更改(域、业务)和一个更简单的查询。

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

    【讨论】:

      【解决方案2】:

      MikeSW 是对的。 CQRS 中的“C”与命令模式中的命令不同。命令处理程序也不同于具有“执行”方法的命令。本质上,处理程序是一种域服务,负责将所有需要的东西汇集在一起​​,以便向域发出命令。

      需要注意的另一点是,从某种意义上说,命令通常不是 DTO,它是具有 getter 和 setter 的属性桶。它们通常被实现为不可变的类。这使得系统更加可靠和可预测,并且在必要时更易于测试和多线程。

      如需了解更多信息以及典型 CQRS 系统各个部分的概览,请查看CQRS - A Step-By-Step Guide to the Flow of a Typical Application

      希望你觉得这很有用。

      【讨论】:

      • “本质上,处理程序是域服务”并非总是如此。很多时候是应用服务。但作为一般的“规则”,命令处理程序可以被视为服务。而且我正在考虑没有任何封装的任何消息(命令和事件)DTO。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2023-02-03
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多