在CQRS模式下,应该可以在域服务或命令处理程序中使用

问题描述 投票:9回答:3

域服务应该注入其他域服务并在彼此之间工作,并使命令处理程序变得愚蠢。或者,域服务应该是愚蠢的(仅用于连接存储库障碍),而大部分工作都在命令处理程序中完成?什么是最佳做法...

c# cqrs
3个回答
8
投票

我想说的是,将所有业务逻辑添加到域对象(如果功能不适合对象,还可以添加域服务),并对诸如此类使用命令处理程序:

  • 实例化域对象并在其上运行方法,
  • 在域服务上运行方法,
  • 提供对域对象的依赖关系,
  • 管理数据库事务,
  • ...

您可以签出onion architecture,我想您的域服务在域模型中,而命令处理程序在应用程序服务中。


0
投票

CommandHandlers可以看作是应用程序的用例,因此,它们的功能是协调对存储库,域服务和域模型的访问。

如果您开始将域服务相互注入,则会开始将它们耦合在一起,并失去彼此的单一责任。

我的答案是让commandHandler处理用例中所需的域服务和模型的执行,通过这种方式,您可以自由地编写任何新命令,而不必处理充满逻辑的域服务。用例,而不是整个域本身。


0
投票

如果您的一项服务依赖于其他服务,则意味着您犯了一些设计错误。如果是这种情况,您只想共享的代码就是其他共享类库,以便两个服务都可以使用它们而彼此之间没有任何依赖性

我不建议在命令处理程序中倾倒所有逻辑,不能从域类之外设置域的许多部分,所以我建议仅在命令处理程序中编写工作跟踪和业务逻辑(不是核心)

© www.soinside.com 2019 - 2024. All rights reserved.