5

この 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;
}

基本的に、3 つから 4 つのレポートを一覧表示するレポートの概要ページがあります。最初の条件がユーザーがそのページに戻りたい場合、2 番目の条件がユーザーがこの特定のレポートを選択した場合、3 番目の条件がユーザーがこのレポートをスタンドアロン レポートとして選択した場合 (概要ページからではなく) の場合です。 .

4

4 に答える 4

7

最初に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コマンドパターンでより多くの知識を集めることができます

于 2012-07-28T15:20:43.383 に答える
5

絶対に変更したい場合はurl、デフォルトの戻り値に初期化し、次の 2 つの条件のいずれかが満たされた場合にのみ変更できます。

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;
}

でも、本当はそのままでいいんです。

于 2012-07-28T15:09:11.683 に答える
5

この「ガードベース」スタイルはいかがですか?多くの場合、上から下までメソッドが読みやすくなります。

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";
}
于 2012-07-28T15:11:24.103 に答える
0

あなたのコードはそのままで問題ありません。ただし、1 行で同じことを実現したい場合は、?: 演算子を使用することも検討できます。

例は次のとおりです。

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");
于 2012-07-28T15:38:13.527 に答える