如何命名Asp.net Mvc控制器?

时间:2009-08-19 22:36:13

标签: asp.net-mvc

我有点困惑,当我应该制作一个新的控制器时,似乎每次我制作一个按钮,我需要制作一个新的控制器来获得正确的路径名称。

例如,在这种情况下,我有一个signIn控制器。

这个控制器会有

1. Login view
2. RestPassword view
3. CreateAccount view

因此,如果他们点击登录,他们会转到其他控制器(我们称之为AccountController),这样就会有所有的帐户视图和内容。

现在RestPassword视图怎么样?当它取决于用户密码时,我希望它转到一个显示它成功的页面(大多数网站似乎都是这样做的,例如asp.net网站,如果你输入一个电子邮件地址,它将转到另一个页面并告诉它您已经发送了新密码。

那么现在应该是另一种观点呢?控制器?

如果是视图,则路径看起来像

http://www.site.com/signIn/EmailForgottenPassword

对我来说什么样的看起来很奇怪。

如果我制作一个新的控制器,那么我可以

http://www.site.com/EmailForgottenPassword

对我来说看起来不错,但是这个控制器只有一个视图。

另一个例子是在这个sigIn页面上,他们是一个Create Account按钮。现在,当点击时,这将转到另一个具有不同帐户列表的页面。

这还应该是一个新的控制器吗?当这些新帐户列在这个新页面上时,它们都会链接到注册控制器,其中包含许多视图。

所以它就像SignController -> RegistrationController -> RegistrationController.

这可能会得到一些不错的链接。

所以就像我说的那样,似乎要获得有意义的好链接,你需要在控制器之后不断创建新的控制器。

所以我必须遗漏一些东西。

3 个答案:

答案 0 :(得分:4)

事实上,你实际上并不是需要多个控制器。单独的控制器只是分离您的顾虑的方法。换句话说,OO设计范例促使我们在逻辑上将我们的代码划分为模块,但是你没有拥有 - 一切都可以在一个控制器中。

需要的是针对您要处理的每种不同类型的请求的单独的控制器操作。也就是说,您需要一个暴露给路由表的控制器方法,可以通过键入一些URL和/或提供一些GET或POST数据来调用它。然后,此方法决定向用户显示的内容(视图)。

此外,您可以通过修改Globals.asax中的路由表,将任何 URL指向任何控制器或控制器操作。

您可能对我的答案有更具体的问题 - 请发布它们,我会在其中进行编辑。

答案 1 :(得分:2)

在您的具体情况下,您只需一个控制器即可。我将它命名为AccountController并向其添加以下操作。

  • 登录
  • 注销
  • 创建
  • CreateConfirmation
  • ResetPassword
  • ResetPasswordConfirmation

然后对于您想要确认屏幕的人,您可以使用Post Redirect Get (PRG) pattern

关于命名。通常,您希望对控制器使用名词,对这些控制器使用动词。这样你就可以得到很好的可读URL。对于名词,您可以选择控制器处理的逻辑/业务术语(比技术术语更好)。账户,客户,产品,博客等...

答案 2 :(得分:0)

如果您遵循SOLID原则,那么您应该非常具体地命名它们。如果您正在使用ASP.NET MVC 2,那么我会将主要小部件放入“区域”,然后为控制器提供良好的名称。让您的网址快乐!