9

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

return RedirectToAction("Index");

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

其中控制器名称、控制器操作名称或视图名称以硬编码字符串的形式提供。这是一种常见的做法,但这是一种好的做法吗?毕竟,如果您重命名控制器,而忘记重命名许多引用之一,您将得到一个运行时错误,而不是更喜欢的编译时错误。

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

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

因此,这种硬编码应该被认为是一种较小的邪恶(而不是不使用 MVC)。还是人们开发了一些实践来解决它?

4

2 回答 2

4

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

于 2013-01-11T16:23:13.740 回答
2

我们本能地知道字符串字面量是一件坏事,因此您将“书籍”设为常量的本能通常是好的。这个想法是将字符串放在一个位置,所以当您需要将“Books”更改为“Products”时,您只需在一个位置进行更改。

但是,这样做会弄乱可以帮助您的工具。我刚刚使用 Resharper 将“HomeController”重命名为“BananaController”,它会自动更新@Html.ActionLink(... "Home" ..)@Html.ActionLink(... "Banana" ..)

我不知道 VS 是否会在没有 Resharper 的情况下做到这一点。我被告知,VS 在重构方面每年都在变得更好,但我实际上并没有与没有 Resharper 的任何人一起工作......

于 2013-01-06T03:10:35.893 回答