MediatR

本篇是对MediatR知识点的一个总结,内容来源于网络。

MediatR是进程内的消息订阅、发布框架。中介者模式的一种实现

什么是中介者模式
定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

MediatR消息模式
1、Request/Response   请求响应模式
    一个请求只能被一个处理者捕获,如果存在多个处理者,那么只有最后一个处理者会被激活。
    具体怎么使用,网上很多,这里不再赘述。
    优势:
    请求响应模式将“方法的调用者”与“方法的实现者”解耦。但是个人认为这并是不很大的优势。两者之间还是有强关联,只不过不需要在“方法的调用者”中注入“方法的实现者”。
    
    也是命令模式的实现
    将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通。(自己感觉是一个东西那么多种模式叫法)
    
    可以实现CQRS:
    CQRS 的全称是:"Command and Query Responsibility Segregation",直译过来就是命令与查询责任分离,可以通俗的理解为 读写分离。(个人以为又是一个鸡肋的新词)
    CQRS 使用命令来更新数据,使用查询来读取数据,将读取和写入 分离到不同的 模型中

  •     IRequest<> 的消息名称以 Command 为结尾的是命令,其对应的 Handler 执行「写」任务
  •      IRequest<> 的消息名称以 Query 为结尾的是查询,其对应的 Handler 执行「读」数据

    
    管道:
    MediatR提供与管道行为相同的功能。可以在响应之前、之后注入相关逻辑,比如记录日志,内容检查等。
    编写一个类实现IPipelineBehavior:    

class LoggingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
    {
        private readonly Logger _logger;
     
        public LoggingBehavior(Logger logger)
        {
            _logger = logger;
        }
     
        public async Task<TResponse> Handle
        (TRequest request, CancellationToken cancellationToken, 
         RequestHandlerDelegate<TResponse> next)
        {
            try
            {
                _logger.Log($"Before execution for {typeof(TRequest).Name}");
     
                return await next();
            }
            finally
            {
                _logger.Log($"After execution for {typeof(TRequest).Name}");
            }
        }
    }


    注册它:
  

services.AddMediatR(typeof(Startup));
services.AddScoped(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>));


    所有注册的管道行为都将按照注册顺序与每个请求处理程序一起执行。(引自:https://blog.csdn.net/mzl87/article/details/123602433)
    
    


2、Notification  发布模式
    一般是一个发布者,多个订阅者。虽然有一定的顺序(经测试是按照类的先后顺序来的),但是这里的重点是“”广播“”,不要有依赖顺序的逻辑。
    
    默认情况下,MediatR的消息发布是一个一个执行的,即便是返回Task的情况,也是使用await等待上一个执行完成后才进行下一个的调用。如果需要使用并行的方法进行调用,可以进行定制,具体可参考官方示例:MediatR.Examples.PublishStrategies
    
    
    
    
     
    主要参考:
    https://blog.csdn.net/mzl87/article/details/123602433
    https://www.cnblogs.com/yakniu/p/16376823.html
    https://zhuanlan.zhihu.com/p/441606336
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForms MediatR 是一个在 Windows Forms 应用程序中实现 Mediator 模式的库。Mediator 模式是一种行为设计模式,通过减少对象之间的直接耦合,允许对象通过一个中介者对象来进行通信。 使用 WinForms MediatR 可以让我们更好地组织和管理 Windows Forms 应用程序中的消息和事件。它提供了一个中央调度器(Mediator),所有的消息和事件都通过这个中央调度器来处理。这样,我们可以将应用程序的不同部分(视图、控制器等)解耦,并降低它们之间的依赖。 WinForms MediatR 的核心是消息和处理程序。消息是应用程序中的事件和请求,而处理程序则是对这些消息进行响应的方法。中央调度器将消息分发给对应的处理程序,并确保它们按照正确的顺序和逻辑来处理。 使用 WinForms MediatR 可以带来很多好处。首先,它简化了代码结构,使得应用程序的逻辑更加清晰和易于维护。其次,它提供了灵活的扩展性,我们可以轻松地添加和移除消息和处理程序,而不会影响到其他部分的代码。此外,它还提供了更好的测试性,我们可以单独对每个处理程序进行单元测试,而不需要依赖其他部分的代码。 总之,WinForms MediatR 是一个很有用的工具,可以帮助我们更好地组织和管理 Windows Forms 应用程序中的消息和事件。通过减少对象之间的直接耦合,它提供了更清晰、易于维护和扩展的代码结构,同时还提供了更好的测试性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值