2013-01-06 19 views
9

当寻找了MVC的代码,你会经常碰到代码片段如下图所示:是在MVC良好实践中硬编码控制器,视图和动作名称?

return RedirectToAction("Index"); 

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

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

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

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

所以这是硬编码的东西,应该被认为是一个较小的邪恶(不使用MVC)。还是人们制定了一些做法来解决它?

+0

从来没有遇到过这种情况,但我喜欢解决方法,并会使用它,如果它出现了。 – AgnosticDev

+5

您正在寻找T4MVC。 – SLaks

+0

确实。刚看了视频。你想让它成为答案吗? –

回答

4

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

2

本能地,我们知道字符串文字是一件坏事,所以你的直觉能使“书籍”保持不变通常是好的。这个想法是把字符串放在一个单独的位置,所以当你需要将“Books”改为“Products”时,你只需要在一个地方改变它。

但是,这样做,你搞乱了那些能帮助你的工具。我只是用ReSharper的为“HomeController的”重命名为“BananaController”,它会自动更新到@Html.ActionLink(... "Banana" ..)

@Html.ActionLink(... "Home" ..)每一个参考,我不知道是否会VS做,如果没有ReSharper的。 VS在每年的重构中都会变得越来越好,但我实际上并没有与没有Resharper的人一起工作......

+0

是的,R#很聪明。我也喜欢,当我可以通过点击这些字符串文字来导航到代码。不过我觉得这些文字不应该是必要的。 –

+0

如果你想像你会阅读教科书和示例应用程序那样做,那么我会把它们作为字符串。 @SLaks提到的T4MVC看起来像是一个好的下一步。我正在考虑如何将MVC渲染从服务器移到客户端,并完全摆脱这些字符串,但我想我仍然需要它们来构建JSON。我要检查出T4MVC =) – jamie