Как я могу избежать использования слишком большого количества операторов if/рефакторинга этого метода?

Это выглядит ужасно, но я не понимаю, как я могу разложить это на множители?
Я думал о создании небольших логических методов, но я думаю, что это не сильно изменится, всегда будет столько же if?

      private String getFolderValue(TableRow row) {
        String cote = row.getCellValue("B");
        String typologie = row.getCellValue("G");
        String description = row.getCellValue("Q");
        if (cote.startsWith("DE")) {
            return "Dessins";
        }
        if (cote.startsWith("PH")){
            return "Photographies";
        }
        if(cote.startsWith("CA")) {
            return "Catalogues";
        }
        if(cote.startsWith("PU") && typologie.contains("affiche")){
            return "Publicité###Affiches";
        }

        if(cote.startsWith("PU") && typologie.contains("flyer")){
            return "Publicité###Flyers";
        }

        if(cote.startsWith("PU") && description.contains("presse")){
            return "Publicité###Presse";
        }

        if(cote.startsWith("PU") && (description.contains("Facture") || description.contains("devis"))){
            return "Documents###Vente";
        }

        if(typologie.contains("Emballage")){
            return "Visual Merchandising###Flyers";
        }

        if(typologie.contains("PLV")){
            return "Visual Merchandising###PLV";
        }
        if(description.contains("Correspondances")){
            return "Documents###Correspondances";
        }

        return null;

    }

2 ответа

Используйте hashmap для хранения данных и извлечения данных.

В общем, шаблон проектирования под названием « Цепь ответственности» может помочь уменьшить сложность, связанную с проблемами, возникающими, когда ваш код должен обрабатывать множество случаев.

В (очень) кратко: вместо множества операторов if вы бы связали множество объектов Java («получатели»). Каждый из них будет проверять, если:

  • Они несут ответственность за текущую ситуацию, а затем
  • вернуть их результат.

Если они не несут ответственности, они передают обработку следующему получателю (т. е. их преемнику).

В конечном итоге в цепочке должен быть хотя бы один ответственный получатель, который даст ответ.

Каждый получатель/обработчик будет содержать только один оператор if.

Так что этот шаблон, по сути, разделяет сложность и разделяет ее на несколько классов.

Изображение Вандерджо -- лицензия: CC BY-SA 4.0

Другие вопросы по тегам