CQS和ASP.NET MVC操作

Mos*_*osh 1 asp.net-mvc command-query-separation

阅读有关CQS原理的人知道:

CQS声明每个方法应该是执行操作的命令,或者是将数据返回给调用者的查询,而不是两者.

说到ASP.NET MVC动作,CQS是否表明我们不应该有这样的动作?

public PartialView InsertOrder(Order order)
{
       OrderService.InsertOrder(order);
       return PartialView("OrderDetails", order);
}
Run Code Online (Sandbox Code Playgroud)

此方法正在更改系统的状态并返回当前状态.如果在这里应用CQS,我们应该有两个单独的操作:一个用于插入新订单,一个用于获取系统系统(如果第一个Action成功完成,应该从客户端调用).但是,这使编程变得复杂.

我想知道你对此的看法.

MOSH

bzl*_*zlm 6

Web上的命令/查询分离的常见示例是Post/Redirect/Get.

在ASP.NET MVC中,这通常以最简单的方式实现

[HttpPost]
public ActionResult UpdateOrder(Order order){
  UpdateOrder(order);
  return RedirectToAction("ViewOrder", new { order.OrderId });
}

[HttpGet]
public ActionResult ViewOrder(int orderId){
  return View(GetOrder(orderId));
}
Run Code Online (Sandbox Code Playgroud)

对于AJAX和部分视图,这可能不是最佳策略,因为Post/Redirect/Get解决的问题并不真正相关,并且重定向可能很棘手.