Рефакторинг существующего кода с помощью некоторого шаблона проектирования

#java #design-patterns #refactoring

#Ява #дизайн-шаблоны #рефакторинг

Вопрос:

У меня есть следующий код, похожий на систему командной строки git с различными поддерживаемыми параметрами и командами. Но, как видно, это связано с множеством условий «если бы», которые
не кажутся чистыми и подвержены ошибкам. Может ли быть способ реструктурировать его, используя какой-то шаблон проектирования

 public static void main(String... args) {  String firstParam;  try {  firstParam = args[0];  } catch (ArrayIndexOutOfBoundsException e) {  System.out.println("Please enter a command.");  return;  }  String secondParam = null; String thirdParam = null; String fourthParam = null;  if (args.length gt; 1) {  secondParam = args[1];  }  if (args.length gt; 2) {  thirdParam = args[2];  }  if (args.length gt; 3) {  fourthParam = args[3];  }  git git = new git();  if (firstParam.equals("init")) {  git.init();  } else if (!git.getWorkingdirectory().exists()) {  System.out.println("not initialized");  } else if (firstParam.equals("status")) {  git.status();  } else if (firstParam.equals("log")) {  git.log();  } else if (firstParam.equals("global-log")) {  git.globalLog();  }  else if (secondParam == null) {  System.out.println("Incorreerands.");  } else if (firstParam.equals("add")) {  git.add(secondParam);  } else if (firstParam.equals("rm")) {  

Рассуждения:
Первое, что приходит мне в голову, — это создание класса из каждой команды. Это, вероятно, называется командным шаблоном. Таким образом, будет класс, соответствующий — add, rm, status, log и т. Д. Всем поддерживаемым аргументам команды git. Я планирую включить около 13 таких команд git, которые будут указаны в качестве опции командной строки. Это будет похоже на 13 классов.
Не уверен, что это хороший подход, или может быть какой-то другой подход?

Ответ №1:

Вы определенно должны выбрать класс для каждой команды, которую вы поддерживаете. У вас будет не только более организованная кодовая база, но и ее будет легче тестировать, поддерживать и расширять, если вам потребуется добавить поддержку дополнительных команд. Не бойтесь иметь много классов, если это имеет смысл для вашего варианта использования. Я бы больше боялся иметь слишком мало классов, которые сделали бы ваш код неуправляемым и нечитаемым.