我看了一下关于MVC的更多教程。但我不明白,人们正在使用“BaseController”做什么?在一个项目中,有人将其用于所有控制器之间的通信。在其他项目中,有人用于获取日志。你能完全向我解释一下吗?
答案 0 :(得分:1)
这不是在应用程序中使用basecontroller的必要条件,但它与您在应用程序中的所有页面使用母版页一样,您可以在此处保持页面的常用功能。从每个控制器调用操作方法时,您需要不同的常用功能,如
所以每次如果你调用不同的控制器及其动作,你需要重新生成它,你可以通过basecontroller重建或处理它。
希望这有助于解决您的问题。
答案 1 :(得分:1)
对于一些开发人员来说,创建一个“BaseController”或者实际上是一个BaseAnything类用于常见功能,然后从该BaseWhatever派生其他东西以便重用该功能是一种非常常见的做法。这只是基本的面向对象编程技术,与MVC没有任何关系(除了我们在这个例子中专门讨论BaseController的事实)。
有一些,我碰巧在其中,他们认为明确的基类通常是代码气味,并且经常被严重滥用为“捕获所有”。为了方便起见,人们常常将各种东西放在这些基类中,因为它比创建一些其他机制以更好的方式共享代码或数据更容易。
除非绝对必要,否则我会避免使用Base类。我倾向于选择其他方法来实现通常以这种方式实现的功能(我称之为懒惰重用)。替代方案的例子是:
您可以创建一个具有最佳意图的基类,并声称它只会用于非常有限的功能......但在您知道它之前,正在您项目中开发的其他人填充各种内容那里。
我的规则是,不要这样做。避免不惜一切代价创建基类,除非没有其他好方法可以做到。
*注意:我指的是用于共享实现/数据的唯一目的的具体基类。通用和抽象基类是一个不同的故事,用于分类法的基类(即关系)和分层目的。一般来说,如果你调用了FooBase或BaseFoo,它可能属于这种类型。
此规则还有其他例外,例如在为测试目的包装untestable类时,通常会为此目的创建一个基类,或者在框架中有时会故意构建一个旨在继承的基类,但不是通用的或抽象的。它可以提供适合框架的功能。但是,在使用这些框架时,这些并不是您经常可以控制的。