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;
            }
        }
    
  • 相关阅读:
    简明Python3教程 12.问题解决
    简明Python3教程 11.数据结构
    【SPOJ 694】Distinct Substrings
    【codeforces Manthan, Codefest 17 C】Helga Hufflepuff's Cup
    【CF Manthan, Codefest 17 B】Marvolo Gaunt's Ring
    【CF Manthan, Codefest 17 A】Tom Riddle's Diary
    【SPOJ 220】 PHRASES
    【POJ 3261】Milk Patterns
    【POJ 3294】Life Forms
    【POJ 1226】Substrings
  • 原文地址:https://www.cnblogs.com/irocker/p/7406019.html
Copyright © 2011-2022 走看看