【发布时间】:2011-03-24 06:39:08
【问题描述】:
参考“Pro ASP.NET MVC 2 Framework”,ActionResult 是Command Pattern的实现。我想知道这里的模式是如何实现的?你能给我点灯吗?
谢谢。
【问题讨论】:
标签: asp.net-mvc design-patterns
参考“Pro ASP.NET MVC 2 Framework”,ActionResult 是Command Pattern的实现。我想知道这里的模式是如何实现的?你能给我点灯吗?
谢谢。
【问题讨论】:
标签: asp.net-mvc design-patterns
action 方法返回一个实例,该实例体现了框架接下来需要执行的命令。这提供了一种将框架/管道代码的执行延迟到操作方法完成之后的方法,而不是从操作方法内部执行。
该命令以ActionResult抽象类为代表,拥有ExecuteResult方法,具体命令如ViewResult和JsonResult实现:
【讨论】:
ActionResult 根本不是命令模式的实现。 Controller 上的 Action 最接近命令,ActionResult 通常是对 View 的更改。命令更新模型,ActionResults 不更新模型。
我通过使用 ActionFilter 并将 Action、Controller 名称和参数存储在历史记录中(例如:List)在 MVC 中实现了命令模式。一个控制器实现了 Undo 和 Redo,而所有其他控制器都遵循所有操作都以 Do_ 和 Undo_ 为前缀的约定。或者,您可以传递一个额外的布尔值?撤消参数。
MVC中Command的方式有很多种,ActionResult与此无关。
【讨论】: