Как сделать эту часть моего кода масштабируемой в Java - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужно включить 2 компонента моего программного обеспечения в зависимости от их права на включение.Приемлемость конкретного компонента определяется несколькими параметрами.Следовательно, чтобы включить определенный компонент, он должен удовлетворять всем необходимым параметрам.Я получаю эти параметры с карты.Я зацикливаюсь на этой карте, чтобы проверить, удовлетворяет ли какой-либо параметр ключ-пара карт всем условиям.Если да, включите компонент.Давайте посмотрим на мой код, чтобы лучше понять -

private boolean enableComponent1() {
   String key = prefix1+"enableComponent1"; //prefix1 is a static string
   Map<String, Object> inputMap = new HashMap<String, Object> ();
   inputMap = useKeyToGetInputMap(key);
   for(Map.Entry<String, Object> entry : inputMap.entrySet()) {
       Object inputObject = entry.getValue();
       String param1Value = inputObject.pram1;
       String param2Value = inputObject.pram2;
       String param3Value = inputObject.pram3;
       if(satisfiesParam1(param1Value) && satisfiesParam2(param2Value) && satisfiesParam3(param3Value)) {
            return true;
       }
   }
    return false;           
}


private boolean enableComponent2() {
   String key = prefix2+"enableComponent2";//prefix2 is a static string
   Map<String, Object> inputMap = new HashMap<String, Object> ();
   inputMap = useKeyToGetInputMap(key);

   for(Map.Entry<String, Object> entry : inputMap.entrySet()) {
       Object inputObject = entry.getValue();
       String param1Value = inputObject.pram1;
       String param2Value = inputObject.pram2;
       String param3Value = inputObject.pram3;
       String param4Value = inputObject.pram4;
       if(satisfiesParam1(param1Value) && satisfiesParam2(param2Value) && satisfiesParam3(param3Value) && satisfiesParam4(param4Value)) {
            return true;
       }        
   }

   return false;
}

Есть так много вещей, которые распространены в обоих методах.Таким образом, имеет смысл повторно использовать некоторые части кода.
Единственные различия в обоих методах -

  • Ключ для получения inputMap различен.
  • Включение компонента 2 зависит от 4 параметров, тогда как компонент 1 зависит от 3 параметров.

    Итак, для повторного использования функциональности я написал код, подобный этому -

private boolean enableComponent(String componentName) {
   String key = "";
   if(componentName.equals("component1")) {
       key = prefix1+"enableComponent1"; //prefix1 is a static string
   }
   else {
       key = prefix2+"enableComponent2"; //prefix2 is a static string
   }
   Map<String, Object> inputMap = new HashMap<String, Object> ();
   inputMap = useKeyToGetInputMap(key);
   for(Map.Entry<String, Object> entry : inputMap.entrySet()) {
       Object inputObject = entry.getValue();
       String param1Value = inputObject.pram1;
       String param2Value = inputObject.pram2;
       String param3Value = inputObject.pram3;
       if(satisfiesParam1(param1Value) && satisfiesParam2(param2Value) && satisfiesParam3(param3Value)) {
           if(componentName.equals("component2")) {
               String param4Value = inputObject.pram4;
               return satisfiesParam4(param4Value);
           } 
           return true;
       }

   }

   return false;
}

Это решение работает, но я не склонен использовать это решение, потому что оно определенно не масштабируется.Поскольку в будущем нам может понадобиться включить больше компонентов, и для этих компонентов могут потребоваться некоторые дополнительные параметры для проверки или могут потребоваться меньшие параметры для проверки.Таким образом, чтобы справиться со всеми этими вещами, этот код быстро станет очень грязным.Может ли быть какой-либо другой подход / шаблон проектирования, которому я могу следовать, чтобы сделать его масштабируемым?

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