#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:
Вы определенно должны выбрать класс для каждой команды, которую вы поддерживаете. У вас будет не только более организованная кодовая база, но и ее будет легче тестировать, поддерживать и расширять, если вам потребуется добавить поддержку дополнительных команд. Не бойтесь иметь много классов, если это имеет смысл для вашего варианта использования. Я бы больше боялся иметь слишком мало классов, которые сделали бы ваш код неуправляемым и нечитаемым.