3

在过去,当我是一名 asp.net webforms 开发人员时,我曾经创建一个基本页面,并在其中放置将在应用程序中使用的常用方法和属性,然后每个页面都将从该页面继承。

我想知道如何为 mvc 4 做到这一点,是否有任何指导方针,或者只是创建一个基本控制器类并从该类继承所有控制器?

您通常在基本控制器类中放置什么?

谢谢

4

2 回答 2

4

我避免使用基本控制器(继承)来解决这个问题,因为它有点味道。您确定您的控制器需要所有这些常用方法和属性吗?至少某些功能可以作为 Controller 类型的扩展方法来实现。

此外,其他功能可能更适合作为注入控制器的服务。对于需要一些(请求)状态的常用方法,我更喜欢服务方法。

也有可能至少某些功能属于操作过滤器(检查权限、设置一些用户配置文件、处理异常;)等)。

作为一个经验法则,我尽量避免在我的控制器中使用继承。控制器应该尽可能简单,并且我需要任何实用程序行为,我尝试以上述方式之一封装它。

于 2013-04-09T07:59:31.510 回答
1

这样做的练习并不多。许多来自多年网络表单的人都这么认为。

在我们相当大的应用程序中,我们创建了一个BaseController但并没有真正看到将常见行为封装到其中的方法。

但是,最终我们确实通过覆盖基本控制器中的OnException方法放置了一些通用代码来记录异常。

所以我认为你应该去:如果你看到你可以封装的代码,那就去做吧。您可以在基本控制器中创建私有方法,不能在基本控制器中创建通用操作方法。您只需将代码封装在受保护的方法中,然后在具体控制器中需要一个单独的 Action 方法。

于 2013-04-09T07:35:39.063 回答