[譯]使用Command模式和MediatR簡化你的控制器
阿新 • • 發佈:2018-03-27
解決方案 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簡化你的控制器