我找到了使用 Asp.net MVC[HttpPost][ValidateAntiForgeryToken]public async Task 的 CQRS 示例实现
我找到了 使用 Asp.net MVC 的 CQRS 示例
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(EditViewModel vm)
{
// First check if view model is valid
if (ModelState.IsValid)
{
// If so create the command object
var command = new AddOrEditCommand();
// Use Automapper to map from the view model to the command
Mapper.Map(vm, command);
// Call the appropriate command handler
var commandResult = await CommandDispatcher.Dispatch(command);
if (commandResult.Success)
{
// If the command is successful, we can retrieve any data returned
var newId = (int)commandResult.Data;
// Do stuff with the generated Id of the entity if we need to...
return RedirectToAction("Index");
}
else
{
// Command not successful, so handle error as appropriate
}
}
// View model not valid, so return to view
return View("Edit", vm);
}
它似乎适合读取操作,但当涉及到写入操作时,视图模型(属于 mvc 层)、命令(应用程序或核心层)和实体类型作为 dbcontext 的一部分。我们需要将视图映射到命令,然后将命令映射到实体。这是好方法吗?
另一方面,如果我们将使用命令作为控制器操作参数,那么为什么我们需要视图模型这一部分 mvc?例如, public async Task<ActionResult> Edit(SomeCommand command)
也许有更好的方法来调整 MVC 和 CQRS?