在CQRS模式中,应该在域服务或命令处理程序中工作

时间:2015-12-10 15:21:01

标签: c# cqrs

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

3 个答案:

答案 0 :(得分:7)

我想说在域对象中添加所有业务逻辑(如果功能不适合对象,还要添加域服务),并使用命令处理程序来执行以下操作:

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

您可以查看onion architecture,我猜您的域服务位于应用服务中的域模型和命令处理程序中。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

我不建议将所有逻辑都放入命令处理程序中,无法从域类之外设置域的许多部分,因此我建议仅在命令处理程序中编写工作跟踪和业务逻辑(而非核心)