查看MVC代码时,您经常会遇到如下代码段:
return RedirectToAction("Index");
<li>@Html.ActionLink("Books", "Index", "Books")</li>
其中控制器名称,控制器操作名称或视图名称作为硬编码字符串提供。这是一种常见的做法,但这是一种好习惯吗?毕竟,如果你重命名控制器,并且忘记重命名许多引用中的一个,你将得到一个运行时错误,而不是更优选的编译时错误。
您可以通过向BaseController添加静态Name属性来缓解该问题,然后使用如下代码(操作名称稍微难以完成)。
<li>@Html.ActionLink("Books", "Index", BooksController.Name)</li>
这个硬编码的东西应该被认为是一个较小的邪恶(不使用MVC)。或者人们开发了一些实践来解决它?
答案 0 :(得分:4)
您正在寻找T4MVC,它会生成强类型的字符串常量类。
答案 1 :(得分:2)
本能地,我们知道字符串文字是一件坏事,所以你的直觉使“书籍”成为常数通常会很好。我们的想法是将字符串放在一个位置,因此当您需要将“Books”更改为“Products”时,您只需在一个位置更改它。
然而,在这样做的过程中,你正在弄乱那些可以帮助你的工具。我刚刚使用Resharper将“HomeController”重命名为“BananaController”,它会自动更新@Html.ActionLink(... "Home" ..)
到@Html.ActionLink(... "Banana" ..)
我不知道VS是否会在没有Resharper的情况下做到这一点。每年我都会对VS进行重构变得越来越好,但我实际上并没有和任何没有Resharper的人一起工作......