【问题标题】:BaseController uses for what in MVC?BaseController 在 MVC 中有什么用途?
【发布时间】:2015-03-07 20:29:39
【问题描述】:

我看更多关于 MVC 的教程。但我不明白,人们使用“BaseController”是为了什么?在一个项目中,有人将它用于所有控制器之间的通信。在其他项目中,有人用于获取日志。你能完整地给我解释一下吗?

【问题讨论】:

  • 它可用于所有继承控制器共享的任何功能...

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


【解决方案1】:

在应用程序中使用 basecontroller 不是强制性的,但就像您在应用程序中为所有页面使用母版页一样,您可以在此处保持您的页面的通用功能相同。从每个控制器调用操作方法时,您需要不同的通用功能,例如

  1. 异常处理
  2. 母版页级别设置
  3. 通用自定义授权。
  4. 常用自定义缓存
  5. 母版页级别的通用模型

所以每次如果你调用不同的控制器及其动作,你需要重新生成相同的,你可以通过 basecontroller 重建或处理。

希望这将有助于解决您的问题。

【讨论】:

    【解决方案2】:

    对于一些开发人员来说,创建一个“BaseController”或实际上是一个 BaseAnything 类以用于通用功能是一种非常常见的做法,然后从该 BaseWhatever 派生其他东西以重用该功能。这只是基本的面向对象编程技术,与 MVC 没有任何特定关系(除了我们在此实例中专门讨论 BaseController 的事实)。

    有一些人(我恰好是其中之一)认为显式基类通常是一种代码异味,并且经常被严重滥用为“包罗万象”。很多时候,人们为了方便而将各种东西放在这些基类中,因为它比创建其他机制更容易以更好的方式共享代码或数据。

    除非绝对必要,否则我会避免使用基类。我倾向于使用其他方法来实现通常以这种方式实现的功能(我称之为惰性重用)。替代品的例子有:

    • 扩展方法
    • Html.Action 方法
    • 属性框架,例如 AOP
    • 依赖注入
    • 还有更多..

    您可能会怀着最好的意图创建一个基类,并声称它只会用于非常有限的功能......但是在您知道之前,在您的项目中开发的其他人正在将各种东西塞进在那里。

    我的规则是,不要这样做。不惜一切代价避免创建基类,除非确实没有其他好的方法。

    *注意:我指的是仅用于共享实现/数据的具体基类。通用和抽象基类有点不同,用于分类(即 is-a 关系)和分层目的的基类也是如此。一般来说,如果你调用了 FooBase 或 BaseFoo,它可能就是这种类型。

    此规则还有其他例外情况,例如在包装不可测试的类以进行测试时,您通常会为此目的创建一个基类,或者在框架中您有时会故意构建一个旨在被继承的基类,但不是通用或抽象的。它可以提供适合框架的功能。但是,在使用这些框架时,您通常无法控制这些事情。

    【讨论】:

      猜你喜欢
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多