当前位置: 首页 > news >正文

通过 MediatR 实现了请求的分发和处理器的解耦

1. 前端请求发起

  • 假设前端通过 HTTP GET 请求访问 GetTemplateSettings 端点,URL 中包含了 SubjectUuidSubjectType 作为查询参数。

2. 进入 Controller 方法

  • 请求到达后,会进入 MinBcController 类中的 GetTemplateSettings 方法,该方法是通过 [HttpGet("GetTemplateSettings")] 特性绑定的。
  • GetTemplateSettings 方法接收一个 GetTemplateSettingsRequest 类型的参数,该参数由 FromQuery 特性指定从 URL 查询参数中绑定。

       [HttpGet("GetTemplateSettings")]
       public async Task<Result<TemplateSettingsVO>> GetTemplateSettings([FromQuery] GetTemplateSettingsRequest request)
       {
           var data = await mediator.Send(request);
           return new Result<TemplateSettingsVO>(data);
       }
  • public record GetTemplateSettingsRequest(string SubjectUuid, SubjectType SubjectType) : IRequest<TemplateSettingsVO>;

3. 请求通过 MediatR 分发

  • GetTemplateSettings 方法内部,通过调用 mediator.Send(request)GetTemplateSettingsRequest 请求对象发送给 MediatR 进行处理。

4. MediatR 查找并执行处理器

  • MediatR 接收到 GetTemplateSettingsRequest 请求后,会根据该请求的类型 GetTemplateSettingsRequest,找到对应的处理器 GetTemplateSettingsRequestHandler
  • GetTemplateSettingsRequestHandlerIRequestHandler<GetTemplateSettingsRequest, TemplateSettingsVO> 的实现类,负责处理类型为 GetTemplateSettingsRequest 的请求并返回 TemplateSettingsVO 类型的结果。

5. 处理器执行业务逻辑

  • GetTemplateSettingsRequestHandler 类的 Handle 方法被调用。此方法接受 GetTemplateSettingsRequest 对象作为参数,并通过 IWeuuSessionIUserServiceCardDbContext 等服务执行相关的业务逻辑。
  • 业务逻辑处理完成后,Handle 方法返回一个 TemplateSettingsVO 对象。
     
  • public class GetTemplateSettingsRequestHandler(IWeuuSession session, IUserService userService, CardDbContext cardContext)
        : IRequestHandler<GetTemplateSettingsRequest, TemplateSettingsVO>
    {
        public async Task<TemplateSettingsVO> Handle(GetTemplateSettingsRequest request,
            CancellationToken cancellationToken)
        {
           //其他代码
            return v;
        }
    }

6. 返回处理结果

  • MediatR 将 Handle 方法返回的 TemplateSettingsVO 对象返回给 GetTemplateSettings 方法中的 data 变量。
  • GetTemplateSettings 方法将 TemplateSettingsVO 包装在 Result<TemplateSettingsVO> 对象中,并作为 HTTP 响应返回给前端。

7. 前端收到响应

  • 最终,前端接收到包含 TemplateSettingsVO 数据的 HTTP 响应,并根据该数据进行后续处理。

总结

整个流程通过 MediatR 实现了请求的分发和处理器的解耦,使得 Controller 层只需要关心如何将请求发送给 MediatR,而业务逻辑则集中在处理器中处理。这种设计提高了代码的可维护性和可扩展性。

http://www.lryc.cn/news/423705.html

相关文章:

  • Naive UI+vue一些组件的注意事项
  • sgetrf M N is 103040 时报错,这是个bug么 lapack and Openblas the same,修复备忘
  • [后端代码审计] PHP 数组知识汇总
  • 单点Redis中面临哪些问题
  • 数学建模--蒙特卡洛算法之电子管更换刀片寿命问题
  • 如何解码Linux下事件响应工具evtest的时间戳
  • 基于STM32开发的智能门禁系统
  • EasyExcel-高性能的 Java Excel 处理库
  • 精益生产培训秘籍:六步策略,助力企业降本增效——张驰咨询
  • 【第19章】Spring Cloud之Gateway自定义Logback配置
  • Java流式编程
  • 高可用集群keepalived从部署到实战一篇解决
  • 22222222222
  • springboot宠物相亲平台-计算机毕业设计源码16285
  • 警惕:手机被监听时会出现这些情况
  • Windows 系统下 MongoDB和PostgreSQL数据库数据的备份和恢复
  • 必应Bing国内搜索广告开户收费标准公示
  • 大模型汇总:文心一言大模型、腾讯混元大模型、通义千问大模型、字节豆包大模型、智普清言大模型、KIMI 大模型、紫东太初大模型、讯飞星火大模型
  • C语言——结构体、共用体、枚举、位运算
  • [LitCTF 2024]exx
  • kafka运维常用命令
  • 笔记:在WPF中OverridesDefaultStyle属性如何使用
  • MATLAB/Simulink 与Gazebo联合仿真
  • 并查集-应用方向以及衍生汇总+代码实现(c++)-学习一个数据结构就会做三类大题!
  • 设计模式六大原则-开放封闭原则(二)
  • C# 截取两个点之间的线段,等距分割线
  • 打造聊天流式回复效果:Spring Boot+WebSocket + JS实战
  • 202年版最新Python下载安装+PyCharm下载安装激活和使用教程!(附安装包+激活码)
  • 【面试宝典】spring常见面试题总结[上]
  • NC单链表的排序