#java
Задание: "Реализовать программу учета среднесуточной температуры на протяжении месяца. Ввод данных реализовать с консоли." Что правильнее: Поместить в конструктор по умолчанию логику ввода данных с консоли со всеми валидациями? Создать отдельный метод для ввода данных, затем создавать объект класса, и к нему применять этот метод? У меня сейчас вот так в конструкторе: public TemperatureRecords() { System.out.println("Введите название месяца:"); setMonth(input.nextLine().toLowerCase()); while (getDaysAmount()!=0) { System.out.printf("Введите температуру %d числа:%n", temp); try { setTemperature(input.nextInt()); setDaysAmount(getDaysAmount()-1); } catch (Exception e) { System.out.println("Ошибка!"); input.skip(".*"); } } }
Ответы
Ответ 1
Определённо, нет. То, как это реализовано у вас - явно неправильно. В вашем случае конструктор класса и сам класс зависят от консольного ввода. Вообще зависимости между классами - вещь не очень хорошая, а зависимости настолько явные и того хуже. В данном случае мы имеем вот какую проблему: ваш класс не может работать без консоли, хотя не имеет к ней ни малейшего отношения. Представьте, что вам понадобилось использовать этот класс в каком-то другом приложении, где взаимодействие с пользователем происходит не через консоль, а каким-то другим способом (страница в браузере, форма десктопного приложения или как-то ещё). Вы не сможете корректно создать экземпляр вашего класса, и конструктор потребуется переписывать (или добавлять ещё один) чтобы он мог принимать данные не из консоли. Это говорит о том, что конструктор должен принимать необходимые данные в качестве параметров, класс можно будет безболезненно использовать о куда угодно. Как-то так: public TemperatureRecords(String month, int[] temperatureData) { setMonth(month); for(int value : temperatureData) { setTemperature(value); setDaysAmount(getDaysAmount()-1); } } Дело даже не в том, что конструктор стал вдвое короче (вырезанный из него код все равно должен будет использоваться, только в другом месте), а в том, что он во-первых, стал проще, а в-вторых, и в-главных, он теперь получает только те данные, которые ему нужны, знать ничего не знает ни о каких классах, которые не имеют к нему отношения и, следовательно, может быть вызван откуда угодно. Логику же получения данных от пользователя и их валидацию правильнее будет возложить на другой код, разделив тем самым логику вашего класса и логику получения для него данных (да-да, старый принцип "разделяй и властвуй" никто не отменял).
Комментариев нет:
Отправить комментарий