我觉得这个if / else应该被重构,但我不确定我能做什么,或者我是否应该让它成为现实......
private String someReportUrl(HttpServletRequest request, HttpServletResponse response) {
String url;
if (isBackToReportsSummary(request)) {
url = SUMMARY_PAGE;
getReportsSummary(request, response);
} else if (isComingFromPageA(request)) {
url = getTabUrl(request, REPORT_URL_FOR_PAGE_A);
}
else {
url = "/standAlone/reportUrl.jsp";
}
return url;
}
基本上我有一个报告摘要页面,其中列出了三到四个报告。首先,如果条件是用户想要返回该页面,则第二个条件是用户选择此特定报告时的情况,第三个条件是用户选择此报告作为独立报告(而不是摘要页面) 。
答案 0 :(得分:6)
首先看看Design Pattern Command。它应该重构if/else
的责任,使其更有条理,更易于维护。然后你的代码应该是这样的:
示例
class ExampleServlet {
private HashMap commandMap = new HashMap();
public ExampleServlet() {
commandMap.put("create", new ActionTypeCreate());
commandMap.put("replace", new ActionTypeReplace());
commandMap.put("update", new ActionTypeUpdate());
commandMap.put("delete", new ActionTypeDelete());
} //endconstructor
} //endclass: ExampleServlet
private void performTask(String action) {
ActionType cmd = (ActionType)commandMap.get(action);
cmd.execute();
} //endmethod: performTask
HERE您可以在命令模式中收集更多知识
答案 1 :(得分:5)
如果您绝对想要更改它,可以将url
初始化为默认返回值,只有在满足以下两个条件之一时才更改它:
private String someReportUrl(HttpServletRequest request, HttpServletResponse response) {
String url = "/standAlone/reportUrl.jsp";
if (isBackToReportsSummary(request)) {
url = SUMMARY_PAGE;
getReportsSummary(request, response);
} else if (isComingFromPageA(request)) {
url = getTabUrl(request, REPORT_URL_FOR_PAGE_A);
}
return url;
}
但实际上,它很好。
答案 2 :(得分:4)
这种“基于守卫”的风格怎么样?它通常使该方法从上到下更容易阅读。
private String someReportUrl(HttpServletRequest request, HttpServletResponse response) {
if (isBackToReportsSummary(request)) {
getReportsSummary(request, response);
return SUMMARY_PAGE;
}
if (isComingFromPageA(request)) {
return getTabUrl(request, REPORT_URL_FOR_PAGE_A);
}
return "/standAlone/reportUrl.jsp";
}
答案 3 :(得分:0)
你的代码就像它的方式一样好。 但是你也可以考虑使用?:operator,如果你想在一行中实现同样的目的。
一个例子是:
class round{
public static void main(String args[]){
int sampleInt=3;
if(sampleInt==1){
sampleInt = 5;
System.out.println("One");
}
else if(sampleInt==2){
sampleInt = 3;
System.out.println("Two");
}
else{
sampleInt = 4;
System.out.println("Else");
}
sampleInt = sampleInt==1?5:(sampleInt==2?3:4);
System.out.println("sampleInt "+sampleInt);
}
}
最后,您的代码看起来像这样:
url = isBackToReportsSummary(request)==true?SUMMARY_PAGE:(isComingFromPageA(request)==true?getTabUrl(request, REPORT_URL_FOR_PAGE_A):"/standAlone/reportUrl.jsp");