为什么' JavaScript'或者' JavaScriptResult'反模式?

时间:2015-03-18 18:40:47

标签: c# asp.net-mvc

我已经读过MVC' JavaScriptResult是一种反模式。

基本的解释是Controller必须知道View,这就是它反模式的原因。

我希望有人可以更详细地描述正在发生的事情以及它为何不好。

很多人都引用了this blog,但我得到了503 ......

示例:

[HttpPost]
public ActionResult SomeMethod()
{
    return JavaScript("window.location = '/url';");
}

1 个答案:

答案 0 :(得分:1)

感谢@GrawCube link

完整文章如下。

  

谨防ASP.NET MVC JavaScriptResult

     

ASP.NET MVC优于经典ASP.NET的一个巨大优势是表示和控制器逻辑之间的关注点的清晰分离。不幸的是,虽然MVC RC已经带来了许多改进,但它也采取了一步措施,通过引入JavaScriptResult ActionResult来打破关注点的清晰分离。根据发行说明,“JavaScriptResult类用于执行在服务器上创建并发送到客户端的JavaScript代码。”发行说明甚至包括以下代码示例:

public ActionResult DoSomething() 
{ 
    script s = "$('#some-div').html('Updated!');"; 
    return JavaScript(s); 
}
     

虽然我可以推测,包含JavaScriptResult的方法不止一个,但上面的例子应该被视为其使用的反模式。这个例子在视图本身的控制器中引入了一个非常脆弱的依赖。在经典ASP.NET中,代码隐藏页面能够对视图中的元素进行强类型访问。在上面的场景中,类似的依赖关系被引入控制器,但现在它甚至都没有强类型。

     

与扩展方法和lambda表达式一样,JavaScriptResult为开发人员提供了更多的权力,但如果使用不当,也有助于自己在脚下射击。因此,与任何强大的.NET工具一样,有充分的理由使用它,密切关注正确的关注点分离,并始终在设计中强烈保持可测试性和可维护性。

     

Billy McCafferty