zoukankan      html  css  js  c++  java
  • [译]使用Command模式和MediatR简化你的控制器

    原文

    你希望保持你的controller足够简单。

    你的controller越来越臃肿,你听说command模式是一个给controller瘦身的解决方案。

    但是你不知道command模式是否适合你的应用。应该有多少command?

    特性

    command模式最好的一点是你可以先不管业务的实现,先聚焦于用户交互界面。

    假设你创建了一个网站,有一个功能是注册和登陆。

    Hello MediatR

    实现command模式非常简单,特别是当你使用了Jimmy Bogard’s MediatR来发送来自MVC/API controller的command。

    使用MediatR你一开始可以创建一个简单的类来代表你的命令。

    public class RegisterUser : IRequest<bool>
    {
        public string EmailAddress { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    

    bool参数表示你的命令将返回bool类型。

    然后你可以在controller里面使用MediatR来发送这个命令。

    public class UserController : Controller
    {
        private readonly IMediator _mediator;
    
        public UserController(IMediator mediator)
        {
            _mediator = mediator;
        }
    
        [HttpPost]
        public ActionResult Register(RegisterUser registerUser)
        {
            bool registered = _mediator.Send(registerUser);
            return View();
        }
    }
    

    要点

    职责分离了。你不需要将仓储、应用服务等放到你的控制器里面去,你需要的仅仅是Mediator

    模型绑定自动填充command对象 (RegisterUser)。

    如此一来确保了你的controller是简单的,controller聚焦于处理转发请求。

    那么怎么处理command呢?非常简单,创建一个handler即可!

    public class RegisterUserHandler : IRequestHandler<RegisterUser, bool>
        {
            public bool Handle(RegisterUser message)
            {
                // save to database
                return true;
            }
        }
    
  • 相关阅读:
    Entity Framework版本历史概览
    读书笔记—CLR via C#章节3
    读书笔记—CLR via C#章节1-2
    C#编程实践–产假方案优化版
    老调重弹--面向对象设计原则--包设计原则
    Redis(七)分布式锁
    Redis(九)高可用专栏之Sentinel模式
    Redis(九)高可用专栏之《简介篇》
    Redis(七)持久化(Persistence)
    Redis(六)管道(Pipelining)
  • 原文地址:https://www.cnblogs.com/irocker/p/7406019.html
Copyright © 2011-2022 走看看