代码之家  ›  专栏  ›  技术社区  ›  Mosh

CQS和ASP.NET MVC操作

  •  1
  • Mosh  · 技术社区  · 14 年前

    读过CQS原理的人都知道:

    CQS指出每种方法都应该 或者是执行 操作或返回数据的查询

    说到ASP.NETMVC操作,CQS是否表示我们不应该有这样的操作?

    public PartialView InsertOrder(Order order)
    {
           OrderService.InsertOrder(order);
           return PartialView("OrderDetails", order);
    }
    

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

    莫斯

    4 回复  |  直到 9 年前
        1
  •  -2
  •   jim tollan    14 年前

    我对这个词有一个模糊的回忆,它来自埃菲尔时代(如果一直追溯到现在,实际上比现在的oop原则早了十年左右(我想是80年代末)。我认为这个术语和/或原理现在可能已经过时了,并被mvc中的actionresults(asp或codeignator等)所取代。实际上,我认为,根据定义(我刚才查过),这种分离与执行动作的逻辑有关。 OrderService.InsertOrder(order)

    我建议您看看asp.NETMVC的最佳实践,它基本上是基于返回actionresult(或partial、contentresult等)。这种模式旨在简化范式,以统一和普遍接受的方式促进生产力。

    希望这有帮助

    吉姆

        2
  •  7
  •   bzlm    11 年前

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

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

    对于AJAX和局部视图 可以

        3
  •  2
  •   Nuno Lopes    14 年前

        4
  •  1
  •   Darin Dimitrov    14 年前

    我从来没有听说过CQS,但是如果您使用的是ASP.NETMVC(MVC模式),那么您编写的操作是非常好的(假设这样) OrderService 对真正的服务有一种抽象)。控制器操纵模型并决定渲染哪个视图,并将此模型传递给视图。

    推荐文章