1

在控制器请求方法结束时,我们通常会执行以下操作:

modelAndView.setViewName("welcomePage");
return modelAndView;

或者

return "welcomePage";

尽管这种方式简单高效,但我是唯一一个发现这些“魔术字符串”错误的人吗?

同一个“welcomePage”字符串可以在同一个类或其他类中多次使用,从而打破了“不要重复自己”的原则。此外,如果我碰巧重命名了“welcomePage.jsp”,我将不得不将项目中所有出现的“welcomePage”全部替换掉​​。

想到的第一个解决方案是将这些(可能是共享的)字符串转换为(可能是集中的)常量或枚举。但我不确定这是使用 Spring MVC 的方式。

您如何看待这些“魔术字符串”?Spring MVC 是否允许以更简洁的方式返回视图?如果没有,您会推荐什么解决方案?

4

1 回答 1

1

1) 当我意识到我对代码中的字符串的厌恶是基于我作为本科生从 EMACS 是所有 IDE 的巅峰之作的人那里学到的东西时,我克服了它。AppConstants.ViewNames.WELCOME_PAGE 真的比“welcomePage”好吗?它的意图很明显,很容易理解。大多数时候,当我看到人们坚持每个字符串不止一次使用时,它们都是常量,常量名称与字符串名称非常接近,因此代码是有意义的,如果你确实改变了,它不会产生任何影响除非您也更改常量名称,否则有意义。/rantoff 在现代 IDE 中更改它需要 15 秒。

2) 视图解析器可以使用 WEB-INF/jsp/welcomePage.jsp(或您设置的任何内容)自动呈现 /welcomePage.htm。除非您要呈现名称与 URL 路径中请求的 html 文档不匹配的 JSP,否则没有理由专门按名称指定视图。

3) 构建您的页面以利用上面的#2,并且不需要指定显式的视图名称。

于 2012-07-04T21:24:16.373 回答