【问题标题】:Should I make my ASP.NET MVC controller actions virtual?我应该让我的 ASP.NET MVC 控制器动作虚拟化吗?
【发布时间】:2011-09-08 10:42:35
【问题描述】:

文件 -> 用于生成具有虚拟操作的控制器的 ASP.NET MVC 项目的新项目。我不确定 MVC 2 或 MVC 3 是否已停止,但这不再是最佳实践吗?

【问题讨论】:

  • 有趣的问题。我没有注意到变化,但现在你提到它,听起来确实有点熟悉。

标签: asp.net-mvc asp.net-mvc-3 virtual actionresult controller-actions


【解决方案1】:

由于各种原因,生成的代码可能会被虚拟化。除非某些工具需要,否则将自己的代码虚拟化并不是一个好习惯。参见 Liskov 替换原则和开闭原则。我认为一些框架这样做是为了方便创建代理,但我无法想象有什么理由让你的所有方法都是虚拟的。对我来说,它尖叫着复制/粘贴或货物狂热的程序员。

【讨论】:

    【解决方案2】:

    T4MVC 确实使动作方法虚拟化。如果你正在使用它,它应该使动作方法虚拟化,没有其他方式可以工作

    【讨论】:

    • 是的,我也意识到了这一点。我一直在想办法。应该深挖虚拟的特点
    • 使动作方法虚拟化 粗略地说不是asp.net mvc的特性。这更多的是 T4MVC 使用的 c# 语言功能
    • 就是这样。 T4MVC 将 virtual 关键字添加到任何还没有它的操作。它也使我的控制器成为部分类
    【解决方案3】:

    如果您将它们设置为虚拟,那么如果您在测试中使用它们,它会使控制器更容易模拟。

    【讨论】:

    • 有趣;您是否派生 TestController : RealController 并覆盖操作方法?我很好奇模拟方法而不是模拟依赖项是如何工作的。你有任何关于这种方法的博客文章吗?
    • 为什么要通过子类化来模拟?
    【解决方案4】:

    ASP.NET MVC 3 的 current documentation 不显示虚拟方法。我不确定是什么让他们成为virtual 会让你受益,因为我从来没有将控制器子类化来覆盖操作。

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 2011-02-13
      • 1970-01-01
      • 2010-11-26
      • 2010-10-03
      • 2011-11-17
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多