【问题标题】:Should command handler contains services or services contains commands?命令处理程序应该包含服务还是服务包含命令?
【发布时间】:2014-09-20 11:05:21
【问题描述】:

我正在尝试遵循 CQRS 模式,但我不知道谁应该包含谁。就像我应该在命令处理程序上注入应用程序服务还是相反?

这是一个例子。我正在向命令处理程序注入服务。并在 CreatProductCategoryCommandHandler

Execute 方法中使用该服务
public CreateProductCategoryCommandHandler(ICategoryService categoryService)
{
    _categoryService = categoryService;
}

或者当我有命令处理程序时我什至需要服务?

【问题讨论】:

    标签: c# .net asp.net-mvc domain-driven-design cqrs


    【解决方案1】:

    在您的定义中,什么是“服务”?

    通常,服务(例如,域服务、应用程序服务)在没有命令处理程序(概念)的情况下工作,而命令处理程序需要服务来处理命令。因此,需要将服务注入到命令处理程序中,而不是相反。

    【讨论】:

    • 啊,好的。 FWIW,IMO 命令处理程序实际上是应用程序服务。
    • 所以你的意思是我只是在复制作品?有其他类别的服务?另一个问题,我应该在哪里提交对数据库的更改。 [在实体框架中,在命令处理程序或类别服务中调用 SaveChanges()]?
    • 详细说明我的问题。我应该将我的更改提交到命令处理程序中的数据库(注入 IUnitOfWork)还是引用 IUnitOfWork 的类别服务?
    • 是的,我会这么说(重复工作)。我们的命令处理程序从数据库/存储库中加载实体,调用实体上的相应方法,然后再次将更改持久化到数据库中。
    • 这是一个典型的命令处理程序,就像我们在生产中使用的那样:github.com/JEEventStore/JEECQRS-Quickstart-Sample/blob/master/… 它是用 Java 编写的,但您会注意到这种模式。 (如果您不熟悉 Java EE/EJB:handle 函数是事务边界(应用容器在调用handle 之前启动事务,并在handle 返回时提交事务)
    猜你喜欢
    • 2019-04-18
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多