Я работаю с фрагментом кода, который мне кажется странным. Код, над которым я работаю, является частью утилиты импорта, которая принимает файл CSV и импортирует данные в базу данных.

Внутри кода я вижу:

ImportUtils.printf("Validation started");

Когда я смотрю на этот метод, он просто вызывает System.out.println:

public static void printf(String s) {
    System.out.println(s);
}

Есть ли в этом какие-то преимущества? Может ли это создать проблему в будущем?

3
Ascalonian 3 Авг 2009 в 20:02

6 ответов

Лучший ответ

Вместо создания простой оболочки System.out.println рассмотрите возможность перехода на полный API ведения журналов. Доступно множество (Commons Logging, Log4j, SLF4J и многие другие. ). Их можно легко настроить как простые оболочки вокруг консоли, которые полезны для начальной разработки. В дальнейшем они могут быть изменены для записи в файлы, отправки электронных писем, записи в базу данных ... Они также предоставляют контекстную информацию (например, какой класс генерирует журналы), что очень полезно и неудобно добавлять самостоятельно.

15
John Meagher 3 Авг 2009 в 16:10

Типичный пример навязчивой развязки. Совершенно бессмысленно, поскольку если вы действительно хотите, чтобы System.out писал где-то еще, вы можете использовать System.setOut (). Если вам нужна большая гибкость, на выбор нет недостатка в фреймворках для ведения журналов.

6
Michael Borgwardt 3 Авг 2009 в 16:18

Я думаю, что это может быть хорошо - тогда вы можете свободно писать в любой буфер, просто изменив реализацию метода ImportUtils.printf.

Это необходимо? Я не знаю, это могло бы быть излишним, но такая инкапсуляция часто может оказаться благом в случае необходимости.

5
Andrew Hare 3 Авг 2009 в 16:05

Имя printf для метода плохое, потому что printf означает форматирование для печати , и этот метод не имеет ни одной функциональности printf знают программисты.

С другой стороны, это косвенное обращение может быть полезным, позволяя улучшать и обновлять метод ведения журнала в будущем без изменения базового кода. Я бы просто не назвал это printf.

2
Sinan Ünür 3 Авг 2009 в 16:06

Не знаток Java, но это выглядит как классический случай, когда «вы можете писать Fortran на любом языке», в данном случае C.

Единственное преимущество, которое я вижу, - это дать программисту на C преимущество в вашем API. Если бы метод назывался «DisplayText» или что-то подобное, я мог бы увидеть, что он имеет некоторую ценность.

1
Austin Salonen 3 Авг 2009 в 16:08

Я думаю, что кто-то попытался проявить смекалку и упростить переход на фрейм регистрации или что-то еще позже в цикле разработки.

Проблема в том, что в данный момент вы меняете вызов на system.out. в структуру ведения журнала все вызовы журнала поступают из одного класса и одной функции, и все они будут иметь одинаковый приоритет. Это означает, что вы теряете большую часть полезных функций, которые автоматически предоставляет регистратор. Например, посмотреть, какой класс написал сообщение журнала. Установка отладчика на более высокий уровень журнала, чтобы получать только самые важные сообщения и т. Д.

Так что я бы посоветовал этого не делать. Похоже, неплохая идея внести быстрые изменения из system.out. к регистратору или чему-то более сложному, но в долгосрочной перспективе это не поможет.

1
Janusz 3 Авг 2009 в 16:47