c# - CQRS 模式上的服务层

标签 c# entity-framework asp.net-mvc-5 cqrs

我正在尝试使用 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。它仍然是放置这些逻辑的好地方吗?

如果我有电子邮件逻辑或运输逻辑怎么办?在传统层上,它们自然会转到应用程序服务,将存储库注入(inject)该服务,它们将如何适应当前架构?我们不想走存储库路线,因为我们想将 EF 作为一个整体来利用,而不是对其进行更多抽象。

我是否应该有一个接受 MediatR 接口(interface)的传统服务层,而让 Controller 有服务接口(interface)?

最佳答案

处理程序类应该处理命令并包含协调任务完成的逻辑。此逻辑可以包括对域模型的委托(delegate)、持久化和检索,以及调用其他服务(例如运送或电子邮件)。请注意,命令处理程序只是应用程序服务的另一种形式。因此,它不应该直接访问 EF,也不应该放置业务逻辑验证的地方。

关于c# - CQRS 模式上的服务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294290/

相关文章:

c# - 如何检测断开连接以完成通过 tcpclient 发送数据

c# - Entity Framework T4 模板,如何确定关系是否是正确的一对多

c# - MVC 5.0 [AllowAnonymous] 和新的 IAuthenticationFilter

c# - VB.NET 和 MVC 5 使用具有内置帮助程序且无 App_Code 的自定义帮助程序

c# - 在 Entity Framework 中显式加载嵌套相关模型

c# - 如何在软件安装期间生成数据库后端?

c# - 从进程中设置执行策略

vb.net - 首先使用 Entity Framework 5 数据库进行依赖注入(inject)。入门?

entity-framework - 用于日志记录的 Entity Framework 多个上下文

Java ".class"属性 - C# 等价物