В настоящее время я «обновляю» свои знания в области разработки, особенно по принципам TDD, читая книги , статьи в Интернете и просматривая видео . Что-то, что появляется повсюду, - предупреждение, не использовать глобальные переменные состояния, поскольку они делают систему хрупкой и менее легкой для тестирования, и поскольку одиночные пакеты не намного лучше или, скорее, одинаковы, не используйте их тоже.
Теперь мне интересно: могу ли я быть последовательным в этом?
- А как насчет кеша, который использует приложение, чтобы ему не приходилось искать часто используемые объекты базы данных снова и снова? Мне нужен один экземпляр этого кэша для передачи, иначе какой смысл?
- Другим примером являются DAO или, как мы их называем, провайдеры. Они делают только доступ к базе данных JPA для нас, но в остальном не имеют никакого состояния. Так почему бы не сделать их синглтоном?
- А контроллеры в веб-интерфейсе? Все, что они делают, это реагируют на запросы - опять же без внутреннего состояния.
Не будет ли потрачено много времени на создание экземпляров последних двух раз и снова? Я уверен, что есть еще несколько примеров, где это применимо.
Может быть, можно использовать синглтоны, если у них нет переменных-членов, кроме финалов?
И даже если у них есть переменные-члены, но все они вставлены в них, следует сохранить их, чтобы использовать их, поскольку любой объект, одиночный или нет, может изменять внедренные объекты, так что это действительно не имеет никакого значения.
Я немного озадачен всем этим бизнесом «избегай одиночек», я даже не уверен, что полностью понимаю риски, связанные с этим. Но больше всего мне хотелось бы услышать мысли о приведенных выше примерах, так как это наиболее распространенные места в нашем приложении, где мы используем синглтоны.
Спасибо!
Кстати: мы используем инъекцию зависимостей пружин, так что, как это сделать, не мой вопрос, а почему бы избежать этого и где это нормально.