在MVC良好实践中硬编码控制器,视图和动作名称?

时间:2013-01-06 02:22:35

标签: c# .net asp.net-mvc

查看MVC代码时,您经常会遇到如下代码段:

return RedirectToAction("Index");

<li>@Html.ActionLink("Books", "Index", "Books")</li>

其中控制器名称,控制器操作名称或视图名称作为硬编码字符串提供。这是一种常见的做法,但这是一种好习惯吗?毕竟,如果你重命名控制器,并且忘记重命名许多引用中的一个,你将得到一个运行时错误,而不是更优选的编译时错误。

您可以通过向BaseController添加静态Name属性来缓解该问题,然后使用如下代码(操作名称稍微难以完成)。

<li>@Html.ActionLink("Books", "Index", BooksController.Name)</li>

这个硬编码的东西应该被认为是一个较小的邪恶(不使用MVC)。或者人们开发了一些实践来解决它?

2 个答案:

答案 0 :(得分:4)

您正在寻找T4MVC,它会生成强类型的字符串常量类。

答案 1 :(得分:2)

本能地,我们知道字符串文字是一件坏事,所以你的直觉使“书籍”成为常数通常会很好。我们的想法是将字符串放在一个位置,因此当您需要将“Books”更改为“Products”时,您只需在一个位置更改它。

然而,在这样做的过程中,你正在弄乱那些可以帮助你的工具。我刚刚使用Resharper将“HomeController”重命名为“BananaController”,它会自动更新@Html.ActionLink(... "Home" ..)@Html.ActionLink(... "Banana" ..)

的每个引用

我不知道VS是否会在没有Resharper的情况下做到这一点。每年我都会对VS进行重构变得越来越好,但我实际上并没有和任何没有Resharper的人一起工作......