.NET Core 使用MediatR CQRS模式

  CQRS(Command Query Responsibility Segregation)命令查询职责分离模式,它主要从我们业务系统中进行分离出我们(Command 增、删、改)和(Query 查),
  
  同时他可以明确的区分我们每一个动作向我们的请求模型和响应模型.从而降低了我们系统的复杂性.
  
  CQRS模式通过使用不同的接口来分离读取数据和更新数据的操作。CQRS模式可以最大化性能,扩展性以及安全性, 还会为系统的持续演化提供更多的弹性,防止Update命令在域模型Level发生冲突。
  
  通常情况我们使用同一数据模型进行我们数据的查询和修改,这是一个非常简单的CURD,在一些复杂的应用程序中,这种方法会变的难以操作,例如在读取方面应用程序可能会存在大量的查询,
  
  返回具有不同的数据传输对象(DTO),对象映射可能会变的非常复杂,在写入方面,模型可能实施复杂的验证和业务逻辑.结果导致模型太多操作,整体变的相当得复杂.
  
  如下图所示:
  
  MediatR他为我们解决将消息发送与消息处理进行了解耦,他同时支持异步和同步来发送和监听消息.
  
  MediatR
  
  Install MediatR
  
  PM> Install-Package MediatR
  
  IMeditator
  
  IRequese、IRequest
  
  IRequestHandler<in TRequest, TResponse>
  
  public class CreateOrderRequestModel:
  
  IRequest<string>
  
  {
  
  public string UserId { get; set; }
  
  public string CardNumber { get; set; }
  
  }
  
  public class GetOrderByIdRequestModel:IRequest<string>
  
  {
  
  public string OrderId { get; set; }
  
  }
  
  //返回值
  
  public interface IRequest<out TResponse> : IBaseRequest{}
  
  //无返回值
  
  public interface IRequest : IRequest<Unit>, IBaseRequest{}
  
  创建处理程序,所有的处理程序都通过IRequestHandler接口来实现,该接口有两个参数,第一个是请求内容,第二个是响应内容.
  
  public class CreateOrderCommandHandler
  
  : IRequestHandler<CreateOrderRequestModel, string>
  
  {
  
  public Task<string> Handle(CreateOrderRequestModel request, CancellationToken cancellationToken)
  
  {
  
  //do something...
  
  return Task.FromResult(www.uuedzc.cn request.UserId);
  
  }
  
  }
  
  正如下代码片段,处理程序实现了IRequestHandler带有输入和输出类型定义的接口
  
  public interface IRequestHandler<www.chuancenpt.comTRequest, TResponse> where TRequest : IRequest<TResponse>
  
  {
  
  Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken);
  
  Install MediatR.Extensions.Microsoft.DependencyInjection
  
  PM> MediatR.Extensions.Microsoft.DependencyInjection
  
  在Startup.cs中注册MediatR
  
  services.AddMediatR(Assembly.GetExecutingAssembly(www.lecaixuanzc.cn ));
  
  我们只需要注入IMediator接口,通过如下代码我们来使用他们
  
  [Route("api/[controller]"www.javachenglei.com)]
  
  [ApiController]
  
  public class OrderController : ControllerBase
  
  _mediator = mediator
  
  var response =www.tengyueylzc.cn await _mediator.Send(requestModel);
  
  return Ok(response);

  CQRS 主要包含两大概念,一个是读写分离,一个是事件源。事件源不是必须项
  
  Reference
  
  https://www.yuanygw.com  github.com/hueifeng/BlogSample/tree/master/src/CQRSMediatR

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值