Как я могу избежать использования слишком большого количества операторов 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 ответа
В общем, шаблон проектирования под названием « Цепь ответственности» может помочь уменьшить сложность, связанную с проблемами, возникающими, когда ваш код должен обрабатывать множество случаев.
В (очень) кратко: вместо множества операторов if вы бы связали множество объектов Java («получатели»). Каждый из них будет проверять, если:
- Они несут ответственность за текущую ситуацию, а затем
- вернуть их результат.
Если они не несут ответственности, они передают обработку следующему получателю (т. е. их преемнику).
В конечном итоге в цепочке должен быть хотя бы один ответственный получатель, который даст ответ.
Каждый получатель/обработчик будет содержать только один оператор if.
Так что этот шаблон, по сути, разделяет сложность и разделяет ее на несколько классов.
Изображение Вандерджо -- лицензия: CC BY-SA 4.0