【问题标题】:When should I create a new controller class in ASP.NET MVC?什么时候应该在 ASP.NET MVC 中创建一个新的控制器类?
【发布时间】:2009-01-07 23:31:04
【问题描述】:

我正在学习 MVC,但在决定何时创建新控制器而不是仅添加与现有控制器关联的操作和视图时遇到了麻烦。一方面,Single Responsibility 似乎是说控制器应该被限制在几个动作上。但是,当我尝试这个时,类的数量呈指数增长(每个类的模型、视图和控制器)——以至于我想知道我是否太过分了。

例如,默认的 AccountController 具有 Login、ChangePassword 和 Register 操作。我倾向于创建一个 LoginController、PasswordController 和 ProfileController 以及相关的模型类。因此,如果有 1 个班级,就会有 3-6 个班级。

这方面有什么好的经验法则吗?

【问题讨论】:

标签: asp.net-mvc design-patterns


【解决方案1】:

您应该为您正在操作的每种模型类型指定一个控制器。控制器充当作用于这些模型的动作集合。这通常是经验法则,但有时控制器的范围会超越单个模型。

AccountController 处理所有与身份验证相关的事情。这是一个超出单个模型范围以涵盖一般身份验证的示例。认证的关键部分是什么?检索用户、更改密码等。

【讨论】:

  • 我正在开发一个没有任何模型的 Rails 应用程序,因为所有信息都是由外部 API 获取的。在这种情况下,我如何决定何时创建新控制器?应用程序中不需要存储。我的应用程序中的主要实体是带有 API 支持的航班,用于搜索、检查可用性、预订等。TIA
  • @furiabhavesh 这应该是一个新问题,而不是评论。您可以将您的控制器映射到您的 API 控制器。
【解决方案2】:

我认为你需要务实。我正在开发一个由 StatsController 组成的项目。动作的数量不断增长(RandomStat、MostPopular、MostViewed、MostVoted 等),这个列表还在继续。这些操作很容易满足,因为 StatsController 的依赖关系不会改变。我正在使用 IoC 来满足我的 Controller 的需求,当我开始看到我的 Controller 需要对新对象的引用时,这表明它们需要被分解。

如果您的 LoginController、PasswordController 和 ProfileController 都依赖于相同的对象,为什么要将它们分开?

【讨论】:

    【解决方案3】:

    我当前的 AccountController 有 12 种方法,对我来说是完全可以管理的。

    我有另一个控制器,目前有 34 个方法,但这些方法都绑定到一个视图,并且它们每个最多有大约 8-10 行代码(检查所需参数、更新模型并根据需要重定向)。

    他们的关键是将您的业务逻辑封装在一个完全独立的模块中。这将使您的动作处理程序保持极轻的重量,并且可以更轻松地测试您的业务逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-09
      • 2015-08-14
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2012-11-13
      相关资源
      最近更新 更多