Ад Синглтона

топ 100 блогов ru_php25.05.2010 Предлагаю обсудить плохие стороны паттерна Singleton.


Что хорошего дает синглтон?

1. Во-первых он заменяет нам глобальные переменные, и пользуясь правильным именем класса мы не войдем в конфликт с классами из сторонних библиотек.

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

3. В синглтон можно запихнуть IoC-контейнер и раздавать не только значения переменных, но и строить объекты нужных типов весьма гибким образом, снижая таким образом зависимости.

Что в синглтоне плохо?

1. Во-первых неудобно тестить. И правда если нам надо потестировать разные классы, которые используют разные настройки, то состояние синглтона от теста к тесту будет меняться.

Эта проблема решается довольно легко. Достаточно добавить в наш синглтон методы push и pop, чтобы можно было запомнить состояние и легко его восстановить.

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

3. В третьих. Параллельная работа. Если у нас в одном рабочем пространстве начинают работать два процесса. Я не писал демонов и вообще параллельных процессов. Но если бы вдруг один и тот же скрипт обрабатывал два запроса в параллель, то наш Синглтон нам бы ого-го как икнулся. Например сунули мы туда значение локали, а у запросов языки разные. Тут нужно от синглтона отказываться. Но до этого места надо дожить еще, -- если можно скажите используете ли вы параллельную работу в одном процессе и в какой ситуации.

Вот тут есть презентация про разные вкусы Синглтона на Джаве

-----------

Понятно, что от Синглтона можно отказаться, но это станет в некоторую копеечку, т.к. придется по классам контроллера и по классам модели таскать за собой контекст. Вопрос стоит ли оно того?

Оставить комментарий

Архив записей в блогах:
Три человека убили судьбу сотен миллионов человек Развал СССР был безусловно рукотворным процессом. Страна с такими громадными экономическими, природными и энергетическими ресурсами не могла "самоуничтожиться", она была вполне реформируема, но была развалена силами «пятой колонны» и ...
Здравствуйте уважаемые. Элизабет Тейлор Сэмуэль Дэвис-младший Лорен Бэколл Джойс Брайнт Анжелика Хьюстон Бриджит Бардо Грейс Келли Мэрилин Монро Рита Хэйворт Приятного времени ...
Enigma - Age Of Loneliness (Carly's Song) 05:21  Ты проснулась поутру, милая, Сотни сонных дорог пройдя. Ну, какая же ты красивая, Беззащитная, как дитя. Смотришь ласково и ...
В турецкой прессе появились "подробности" вероятного вторжения Турции в Африн. С учетом того, что озвучиваются существенные военные детали, все это может быть и дезинформацией для сокрытия реального плана турецкого Генштаба, с целью введения в заблуждение курдского командования. ...
Мир чувствует, что удавка на шее Человечества затягивается все туже. Даже, если помнит про «бесплатный сыр», все –равно суёт голову. Кто –то обреченно, кто- то на «авось».. А для того, чтобы шея сама подставилась под удавку, голове подсовывают беЗплатные услуги и технологии. Осваивай! ...