【问题标题】:CQRS - Command/Query single parameterCQRS - 命令/查询单个参数
【发布时间】:2021-09-14 05:34:58
【问题描述】:

所有展示 CQRS 模式的示例总是有 0 或 1 个参数。

例如:

public class MyCommand
{
    public int Value { get; set; }
}

public class MyCommandHandler
{
    public void Handle(MyCommand myCommand)
    { ... }
}

假设我们直接调用句柄除了实现细节还有什么原因吗?

我知道使用单个参数的优点,例如封装执行操作所需的所有数据,并且如果我们必须使用 Q/C 队列、验证等,还可以更轻松地进行序列化。

但是在处理程序中有多个参数是“错误的”吗?

【问题讨论】:

    标签: cqrs


    【解决方案1】:

    但是在处理程序中有多个参数是“错误的”吗?

    没有;这是权衡

    当我们的处理程序具有不兼容的签名时,组合处理程序——例如,创建一个具有一些横切关注点的处理程序——需要更多的工作,因为所需的变体数量。

    【讨论】:

      【解决方案2】:

      不,不是,我会说有时建议使用多个参数来分离关注点。因为您可能拥有不希望与业务数据结合的 traceID、correlationID 或其他类型的技术数据。发送请求时使用的是 headers,所以发送消息进行处理时,也可以使用 headers

      public class MyCommandHandler
      {
          public void Handle(MyCommand myCommand, MyHeader $header, MySecondHeader $secondHeader)
      }
      

      另外,如果您出于某种原因不想在构造函数中注入依赖项,则可以将它们作为参数注入。

      【讨论】:

        猜你喜欢
        • 2021-12-19
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        • 2015-11-19
        • 1970-01-01
        • 1970-01-01
        • 2022-04-09
        • 1970-01-01
        相关资源
        最近更新 更多