【问题标题】:How ActionResult of ASP.NET MVC implement Command PatternASP.NET MVC 的 ActionResult 如何实现命令模式
【发布时间】:2011-03-24 06:39:08
【问题描述】:

参考“Pro ASP.NET MVC 2 Framework”,ActionResult 是Command Pattern的实现。我想知道这里的模式是如何实现的?你能给我点灯吗?

谢谢。

【问题讨论】:

    标签: asp.net-mvc design-patterns


    【解决方案1】:

    action 方法返回一个实例,该实例体现了框架接下来需要执行的命令。这提供了一种将框架/管道代码的执行延迟到操作方法完成之后的方法,而不是从操作方法内部执行。

    该命令以ActionResult抽象类为代表,拥有ExecuteResult方法,具体命令如ViewResultJsonResult实现:

    【讨论】:

    • 除了延迟执行,还有其他好处吗?
    • @Ricky,延迟执行是command pattern背后的主要思想:在面向对象编程中,命令模式是一种使用对象来表示和封装的设计模式以后调用方法所需的所有信息.
    • @Dimitrow:感谢您的参考
    • 什么?综上所述,这到底与命令模式有什么关系? ActionResult 如何帮助我将它们堆叠起来以供以后 undo() 或类似的事情使用?
    【解决方案2】:

    ActionResult 根本不是命令模式的实现。 Controller 上的 Action 最接近命令,ActionResult 通常是对 View 的更改。命令更新模型,ActionResults 不更新模型。

    我通过使用 ActionFilter 并将 Action、Controller 名称和参数存储在历史记录中(例如:List)在 MVC 中实现了命令模式。一个控制器实现了 Undo 和 Redo,而所有其他控制器都遵循所有操作都以 Do_ 和 Undo_ 为前缀的约定。或者,您可以传递一个额外的布尔值?撤消参数。

    MVC中Command的方式有很多种,ActionResult与此无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 2013-11-19
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多