juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2010-02-10 04:48 pm

синглтоны

Как-то я не врубался во вред синглтонов - пока не пришлось рефакторить одну и ту же апликацию, разнесённую по двум платформам методом копи-пейста. Всякая собака ссылается на синглтон. Будто нельзя в параметрах получить (di, т.е.)

Так я о чём? Да вот: синглтон класса - это примерно как поименованная общая область. Вот вам имя, вот вам инстанс, и делайте вы с этим что хотите.

Тьфу.

Так что осознал, да. Синглтоны не то что зло, а большая глупость, имеющая причиной отсутствие дизайна. Десяток синглтонов - и вот вам помойка. В добавок к которой возникает священное знание: чтобы сделать то-то и то-то, надо взять три таких-то синглтона (и передать их друг другу, во).

[identity profile] gabaidulin.livejournal.com 2010-02-11 09:28 am (UTC)(link)
В параметрах можно получить. Но singletone все равно нужен иногда. Это мощная семантическая конструкция. Самый типичный пример Сессия. Она должна быть, как правило, одна для каждого клиента(внутри она может быть даже физически реплицируема по кластеру, это не важно). Такую семантику лучше всего передает как раз Singleton. Чем на ваш взгляд можно также семантически точно заменить этот паттерн в java/c#/php/etc?

[identity profile] vaddimka.livejournal.com 2010-02-11 07:06 pm (UTC)(link)
фабриками

[identity profile] fantaseour.livejournal.com 2010-02-12 05:26 am (UTC)(link)
в php сессии вполне себе ложатся в DI:

Phemto имеет встроенные классы: Factory (по умолчанию), который всегда создает новый экземпляр объекта, Reused который отдает ссылки на один и тот же экземпляр, и Sessionable, который хранит экземпляр объекта в системной переменной PHP $_SESSION. Они все наследуют от базового абстрактного класса Lifecycle. Разработчики могут расширять эти классы...

http://h-type.com/filez/lj/articles/di/