Я работаю с фрагментом кода, который мне кажется странным. Код, над которым я работаю, является частью утилиты импорта, которая принимает файл CSV и импортирует данные в базу данных.
Внутри кода я вижу:
ImportUtils.printf("Validation started");
Когда я смотрю на этот метод, он просто вызывает System.out.println:
public static void printf(String s) {
System.out.println(s);
}
Есть ли в этом какие-то преимущества? Может ли это создать проблему в будущем?
6 ответов
Вместо создания простой оболочки System.out.println рассмотрите возможность перехода на полный API ведения журналов. Доступно множество (Commons Logging, Log4j, SLF4J и многие другие. ). Их можно легко настроить как простые оболочки вокруг консоли, которые полезны для начальной разработки. В дальнейшем они могут быть изменены для записи в файлы, отправки электронных писем, записи в базу данных ... Они также предоставляют контекстную информацию (например, какой класс генерирует журналы), что очень полезно и неудобно добавлять самостоятельно.
Типичный пример навязчивой развязки. Совершенно бессмысленно, поскольку если вы действительно хотите, чтобы System.out писал где-то еще, вы можете использовать System.setOut (). Если вам нужна большая гибкость, на выбор нет недостатка в фреймворках для ведения журналов.
Я думаю, что это может быть хорошо - тогда вы можете свободно писать в любой буфер, просто изменив реализацию метода ImportUtils.printf
.
Это необходимо? Я не знаю, это могло бы быть излишним, но такая инкапсуляция часто может оказаться благом в случае необходимости.
Имя printf
для метода плохое, потому что printf
означает форматирование для печати , и этот метод не имеет ни одной функциональности printf
знают программисты.
С другой стороны, это косвенное обращение может быть полезным, позволяя улучшать и обновлять метод ведения журнала в будущем без изменения базового кода. Я бы просто не назвал это printf
.
Не знаток Java, но это выглядит как классический случай, когда «вы можете писать Fortran на любом языке», в данном случае C.
Единственное преимущество, которое я вижу, - это дать программисту на C преимущество в вашем API. Если бы метод назывался «DisplayText» или что-то подобное, я мог бы увидеть, что он имеет некоторую ценность.
Я думаю, что кто-то попытался проявить смекалку и упростить переход на фрейм регистрации или что-то еще позже в цикле разработки.
Проблема в том, что в данный момент вы меняете вызов на system.out. в структуру ведения журнала все вызовы журнала поступают из одного класса и одной функции, и все они будут иметь одинаковый приоритет. Это означает, что вы теряете большую часть полезных функций, которые автоматически предоставляет регистратор. Например, посмотреть, какой класс написал сообщение журнала. Установка отладчика на более высокий уровень журнала, чтобы получать только самые важные сообщения и т. Д.
Так что я бы посоветовал этого не делать. Похоже, неплохая идея внести быстрые изменения из system.out. к регистратору или чему-то более сложному, но в долгосрочной перспективе это не поможет.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].