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

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

Тьфу.

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

Date: 2010-02-11 02:24 am (UTC)
From: [identity profile] sab123.livejournal.com
Алиментарно обеспечить. Иметь явный кэширующий контекст.

Date: 2010-02-11 02:38 am (UTC)
From: [identity profile] itman.livejournal.com
http://ivan-ghandhi.livejournal.com/1237032.html?thread=11119400#t11119400
Вообще, кеширующий контекст - это какие-то странные слова. Но важно-то тут то, что описанною мною ситуация, это не совсем инициализация. Инициализация происходит раньше. То есть объект существует априори в единственном числе.

Date: 2010-02-11 03:34 am (UTC)
From: [identity profile] itman.livejournal.com
Зря я все-таки потер. Все-таки, это получается синглтон. Можно считать, что есть функция
GetFileOpenIfClose(int FileNumber)
В парадигме синглтона, это решается заведение синглтона на каждый файл. Код инициализации синглотона также открывает файл. И можно в двух словах объяснить, как кеширующий контекст поможет заменить синглтон?

Date: 2010-02-11 02:28 pm (UTC)
From: [identity profile] sab123.livejournal.com
Объект будет существовать не в глобальном виде а как часть другого явно передаваемого объекта. То есть, да, синглтон, но внутри своего пространства имен.

Что такое контекст - читать тут http://members.verizon.net/~babkin/tpopp/05exit.txt , в конце страницы.

Date: 2010-02-11 03:30 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Гуд пойнт насчёт особой проблемы с синглтонами в многопоточных программах. Поди найди концы - и, соответственно, решение держать контекст гораздо более осмыслено.

Date: 2010-02-11 03:53 pm (UTC)
From: [identity profile] itman.livejournal.com
Это фабрика, ИМХО. Но внутри все равно должны быть синглтона. От них не убежать. Главное, это избавиться от вызов getInstance там, где от него можно избавиться.

Date: 2010-02-12 01:27 am (UTC)
From: [identity profile] sab123.livejournal.com
Нет-нет. Фабрика каждый раз создает новый объект, используя запомненные параметры для конструктора.

Контекст же типа мешка. Вначале кто-то создает всякие полезные объекты и кладет их в мешок. После чего ссылка на этот мешок передается везде где нужно, и когда этим прочим местам что-то нужно, они находят готовый объект в этом мешке. Таким образом глобальные переменные оказываются не совсем глобальными, а только в пределах мешка (т.е. контекста).

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

June 2025

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 1st, 2025 06:24 pm
Powered by Dreamwidth Studios