Подтвердить что ты не робот

Класс полезности в приложении Spring - использовать статические методы или нет?

Скажем, у меня есть класс утилиты DateUtil (см. ниже). Чтобы использовать этот метод метод вызывающего объекта использует DateUtils.getDateAsString(aDate). Было бы лучше удалить статический модификатор и сделайте DateUtil a spring bean (см. DateUtilsBean) и введите его в классы вызова или просто оставить его как есть?

Один недостаток, который я вижу при использовании статики, - это проблемы вокруг насмешек, см. Как насмехаться со статическими методами?

public class DateUtils {

    public static String getDateAsString(Date date) {       
        String retValue =  "" // do something here using date parameter
        return retValue;
    }
}

Spring bean версия

@Component
public class DateUtilsBean {

    public String getDateAsString(Date date) {      
        String retValue =  "" // do something here using date parameter
        return retValue;
    }
}
4b9b3361

Ответ 1

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

Ответ 2

Было бы лучше объявить его как Spring bean, потому что его жизненный цикл управляется с помощью Spring, и вы можете в конечном итоге ввести зависимости, скомпилировать объект, а также протестировать его в надлежащим образом, чтобы не говорить, что вы можете использовать его как обычный объект и передать его как параметр, переопределить метод в подклассах и т.д.

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

Ответ 3

Я согласен с Шон Патрик Флойд.

Это мой критерий: если методы класса делают вещи только по параметрам, которые они получают, без внешних зависимостей (база данных, файловая система, пользовательская конфигурация, другие объекты / beans и т.д.), тогда я бы сделайте это со статическими методами, обычно в конечном классе с частным конструктором.

В противном случае я бы выполнил его с помощью Spring bean.

Итак, в случае, когда вы поднимаете, в соответствии с этим критерием, я бы написал класс со статическими методами.

С уважением.