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

синглтоны

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

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

Тьфу.

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

[identity profile] qehgt.livejournal.com 2010-02-11 01:11 am (UTC)(link)
Синглтон такое же зло, как и глобальные объекты, да.

С такими же минусами и отсутствием плюсов.

[identity profile] anton-solovyev.livejournal.com 2010-02-11 03:15 am (UTC)(link)
Ну, я не знаю, а какие-нибудь findViewById() и всевозможные lookup provider (или как там его в Neatbeans) намного лучше?

Так или иначе всегда оказывается какой-нибудь сервис из серии "а вот как бы мне тут получить reference на что-то такое очевидное, но без передачи параметров?"

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

[identity profile] cema.livejournal.com 2010-02-11 10:30 pm (UTC)(link)
Что за di?

А вообще-то синглтон нужен, скажем, для описания конфигурации. Ну или где у нас логи лежат, такие вещи (тоже конфигурация). В каком-то смысле аспекты? (Могу путать, аспекты не знаю толком.)