我正在尝试使用CQRS模式而不是存储库和Onion架构来构建应用程序,而不是使用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
我正在考虑将业务逻辑(例如验证)放在Handler类上,但我认为这些类可以直接访问EF。它仍然是放置这些逻辑的好地方吗?
如果我有电子邮件逻辑或出货逻辑怎么样?在传统层上,他们自然会转到应用程序服务,将存储库注入到该服务中,它们如何适应当前的体系结构?我们不想去存储库路由,因为我们想要整体利用EF而不是更多地抽象它。
我是否应该拥有接受MediatR接口并让控制器改为使用Service接口的传统服务层?
答案 0 :(得分:1)
处理程序类应该处理命令并包含逻辑以协调任务的完成。此逻辑可以包括对域模型的委派,持久性和检索,以及调用其他服务(例如传送或电子邮件)。注意,命令处理程序只是应用程序服务的另一种风格。因此,它不应该直接访问EF,也不应该进行业务逻辑验证。