CQRS 模式上的服务层

本文关键字:服务 模式 CQRS | 更新日期: 2023-09-27 18:34:02

我正在尝试使用 CQRS 模式而不是存储库和洋葱架构而不是使用 MVC5 堆栈的 n 层来构建应用程序。

我现在有以下层:

Web.Data - Contains DbContext 
Web.Model - POCO classes
Web.Service - Implementation of Commands and Queries using MediatR
   --Commands
   -----Request
   -----Handlers
   --Queries
   -----Request
   -----Handlers
Web.UI

我正在考虑将业务逻辑(例如验证)放在处理程序类上,但我发现这些类可以直接访问 EF。它仍然是一个放置这些逻辑的好地方吗?

如果我有电子邮件逻辑或运输逻辑怎么办?在传统层上,他们自然会转到应用程序服务,将存储库注入到该服务上,它们如何适应当前的体系结构?我们不想采用存储库路由,因为我们希望将 EF 作为一个整体来利用,而不是进一步抽象它。

我是否应该有一个接受 MediatR 接口并让控制器具有服务接口的传统服务层?

CQRS 模式上的服务层

处理程序类应处理命令并包含用于协调任务完成的逻辑。此逻辑可以包括委派到域模型、持久性和检索,以及调用其他服务(如寄送或电子邮件)。请注意,命令处理程序只是应用程序服务的另一种风格。因此,它不应直接访问 EF,也不应是放置业务逻辑验证的位置。