Сократите повторение кода в операторе If - PullRequest
0 голосов
/ 17 ноября 2011

У меня довольно большой кусок кода, который создает / возвращает массив результатов поиска, который составлен из нескольких источников данных.Меня попросили включить метод ограничения даты, с помощью которого пользователи могут создавать массив на основе двух полей даты.Если одно из этих полей даты заполнено, скажем, называется его dateFrom, то массив будет возвращать данные после указанной даты.Аналогично, если заполнить dateTo, он будет заполнять массив предшествующими данными, а если оба, то, очевидно, будет заполняться на основе этого диапазона.

Это все приятно и легко сделать с помощью пары простых вложенных операторов if или регистра переключателя, но моя проблема в том, что это также будет означать, что мне придется повторять здоровенный кусок кода.Есть ли способ, как я могу предотвратить повторение одного и того же базового кода конструкции массива 4 раза?Я знаю, что это ужасный псевдо-код, но он понимает мою точку зрения:

if(condition1){
  setItem1(getMethod());
  setItem2(getMethod());
  setItem3(getMethod());
} else if (condition2) {
  setItem1(getMethod());
  setItem2(getMethod());
  setItem3(getMethod());
} else if (condition3) {
  setItem1(getMethod());
  setItem2(getMethod());
  setItem3(getMethod());
} else {
  setItem1(getMethod());
  setItem2(getMethod());
  setItem3(getMethod());
}

return ArrayList();

Стоит отметить, что, хотя это более обобщенный вопрос Java, я использую инфраструктуру JSF2, и этот метод происходит в bean-компоненте ViewScoped & isреализовано с использованием тега @PostContruct.

Cheers

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011

Я предлагаю переместить оператор if в другой метод для уменьшения связи, а затем переместить setItems в другой метод и отправить результаты getmethods в качестве параметров.(лучше, если вы измените поля объекта) просто псевдокод:

 return createArray();

 private List createArray()
 {
     if(condition1){
        setItems(getMethod(),getMethod(),getMethod());
        return ArrayList();
     }
     if (condition2) {
        setItems(getMethod(),getMethod(),getMethod());
        return ArrayList();
     } 
     ...
 }

 private void setItems(Object var1, Object var2, Object var3)
 {
     ...
 }

Если вы хотите полностью избавиться от if, вы можете использовать полиморфизм и внедрение зависимостей, но в этом случае это может быть излишним...

0 голосов
/ 17 ноября 2011

Как насчет

if(condition1 || condition2 || condition3 ||condition4){
    stuff
}

Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...