在MVC中硬编码控制器、视图和操作名称是良好的实践吗?

9
当查看MVC代码时,您经常会遇到以下代码片段:
return RedirectToAction("Index");

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

在编写代码时,通常会将控制器名称、控制器操作名称或视图名称作为硬编码字符串提供。这是一种常见的做法,但这是一个好习惯吗?毕竟,如果您重命名控制器并忘记重命名其中的某个引用,您将得到运行时错误,而不是更喜欢的编译时错误。

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

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

那么,硬编码是应该被视为较小的恶(而不是不使用MVC)吗?或者人们开发了一些实践来解决它?


从未遇到过这种情况,但我喜欢这种解决方法,如果有类似的情况出现,我会使用它。 - AgnosticDev
5
你正在寻找 T4MVC。 - SLaks
确实。刚刚看了视频。您想把它作为答案吗? - Sebastian K
@Slaks:请把它变成一个答案。我会接受它。 - Sebastian K
2个回答

4

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


2

本能地我们知道字符串文字是一个不好的东西,因此你将“Books”变成常量的直觉通常是正确的。这个想法是将字符串放在一个单一的位置,所以当你需要将“Books”改成“Products”时,你只需要在一个地方改变它。

然而,这样做会破坏将帮助你解决问题的工具。我刚刚使用Resharper将“HomeController”重命名为“BananaController”,它自动更新了每个引用@Html.ActionLink(... "Home" ..)@Html.ActionLink(... "Banana" ..)

我不知道如果没有Resharper,VS是否也会这样做。据说,VS每年都在改进重构功能,但我实际上与没有Resharper的任何人合作...


是的,R#相当不错。我也喜欢通过点击字符串文字来导航到代码。但我仍然觉得这些文字不应该是必需的。 - Sebastian K
如果你想按照教科书和示例应用程序中所读的方式进行操作,那么我建议将它们保留为字符串。@SLaks提到的T4MVC似乎是一个不错的下一步。我正在考虑如何将我的MVC渲染从服务器移动到客户端,并完全摆脱这些字符串,但我想我仍然需要它们来构建JSON。我要去看看T4MVC =) - jamie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接