1. 程式人生 > >[譯]使用Command模式和MediatR簡化你的控制器

[譯]使用Command模式和MediatR簡化你的控制器

解決方案 iat att 控制 -c tab git 返回 https

原文

你希望保持你的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;
        }
    }

[譯]使用Command模式和MediatR簡化你的控制器