Начну-ка с kuj>P.S. Если желаете продолжать данный спор просьба отвечать по существу, либо не отвечать совсем. Ответы в стиле: синглтон — зло точка оставьте пожалуйста при себе.
Тогда ответьте по-существу мне, без всяких недомолвок:
_FR>>Да, и перед чем преимущество? kuj>Ваш вопрос ^.
У синглетона _возможно_ есть преимущество перед new, но есть ли перед альтернативными способами получения ссылки наобъект: фабрикой, DC, SL?
_FR>>Сделать "IoC-контейнер" синглетоном… kuj>В некоторых случаях IoC-контейнер должен быть синглтоном. Не во всех, далеко не во всех, ясное дело.
Расскажите, что это за "некоторые", "не все"?
kuj>Не применяете потому, что не знаете как применять.
Расскажите, как надо применять.
kuj>Добавлю еще: для singleton`а в отличии от monostate-класса можно делать subclassing
Когда и в чём это поможет?
... << RSDN@Home 1.2.0 alpha rev. 717>>
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
kuj>>P.S. Если желаете продолжать данный спор просьба отвечать по существу, либо не отвечать совсем. Ответы в стиле: синглтон — зло точка оставьте пожалуйста при себе. _FR>Тогда ответьте по-существу мне, без всяких недомолвок:
Я уже ответил Вам по существу. На бесплатные консультации у меня, к сожалению, времени нет. В Интернет есть масса источников, где разжеван ответ на каждый из Ваших вопросов. Потрудитесь поискать.
_FR>>>Да, и перед чем преимущество? kuj>>Ваш вопрос ^. _FR>У синглетона _возможно_ есть преимущество перед new, но есть ли перед альтернативными способами получения ссылки наобъект: фабрикой, DC, SL?
Абсолютно те же самые преимущества, что уже были перечислены мной.
_FR>>>Сделать "IoC-контейнер" синглетоном… kuj>>В некоторых случаях IoC-контейнер должен быть синглтоном. Не во всех, далеко не во всех, ясное дело.
_FR>Расскажите, что это за "некоторые", "не все"?
kuj>>Не применяете потому, что не знаете как применять.
_FR>Расскажите, как надо применять.
kuj>>Добавлю еще: для singleton`а в отличии от monostate-класса можно делать subclassing
_FR>Когда и в чём это поможет?
Здравствуйте, kuj, Вы писали:
kuj>Я уже ответил Вам по существу. На бесплатные консультации у меня, к сожалению, времени нет. В Интернет есть масса источников, где разжеван ответ на каждый из Ваших вопросов. Потрудитесь поискать.
Ну хоть ссылкой поделитьсь, что, очень жалко?
Я же в такой же манере тоже мог ответить, мол, и "мои аргументы уже разжёваны людьми поумнее и пообразованнее нас с вами, так что зря клавир мучить…" ан нет,
_FR>>>>Да, и перед чем преимущество? kuj>>>Ваш вопрос ^. _FR>>У синглетона _возможно_ есть преимущество перед new, но есть ли перед альтернативными способами получения ссылки наобъект: фабрикой, DC, SL?
kuj>Абсолютно те же самые преимущества, что уже были перечислены мной.
Здравствуйте, _FRED_, Вы писали:
kuj>>Я уже ответил Вам по существу. На бесплатные консультации у меня, к сожалению, времени нет. В Интернет есть масса источников, где разжеван ответ на каждый из Ваших вопросов. Потрудитесь поискать.
_FR>Ну хоть ссылкой поделитьсь, что, очень жалко? _FR>Я же в такой же манере тоже мог ответить, мол, и "мои аргументы уже разжёваны людьми поумнее и пообразованнее нас с вами, так что зря клавир мучить…" ан нет,
Так Вы именно в такой манере и отвечаете. Я пока от Вас ничего конструктивного не видел. Повторять "абаснуй", "абаснуй" и попугай может.
_FR>>>>>Да, и перед чем преимущество? kuj>>>>Ваш вопрос ^. _FR>>>У синглетона _возможно_ есть преимущество перед new, но есть ли перед альтернативными способами получения ссылки наобъект: фабрикой, DC, SL?
kuj>>Абсолютно те же самые преимущества, что уже были перечислены мной.
_FR>Где? Всё, что я видел, это
Здравствуйте, minorlogic, Вы писали:
M>Почитайте "Рефакторинг с использованием шаблонов" там про анонимный клуб бывших любителей сингелтонов.
------
Singletonitis, a term I coined, means "addiction to the Singleton pattern." The intent of a Singleton is to "ensure a class only has one
instance, and provide a global point of access to it" [DP, 127]. You're infected with Singletonitis when the Singleton pattern fixes itself so
deeply into your skull that it begins lording it over other patterns and simpler design ideas, causing you to produce way too many
Singletons.
I've rid myself of Singletonitis and am now considering starting "Singletons Anonymous," a place where recovering Singleton abusers can
support each other on the slow journey back to using simple, nonglobal objects. The Inline Singleton refactoring is a useful step on that
journey. It helps rid your systems of unnecessary Singletons. This leads to the obvious question: When is a Singleton unnecessary?
Short answer: Most of the time.
Long answer: A Singleton is unnecessary when it's simpler to pass an object resource as a reference to the objects that need it, rather than
letting objects access the resource globally. A Singleton is unnecessary when it's used to obtain insignificant memory or performance
improvements. A Singleton isn't necessary when code deep down in a layer of a system needs to access a resource but the code doesn't
belong in that layer to begin with. I could go on. The point is that Singletons aren't necessary when you can design or redesign to avoid
using them.
------
По-моему, никто и не спорит — бездумно лепить синглтоны это зло. Но то же самое можно сказать о всех патернах проектирования.
Синлтон, как и любой другой патерно можно и нужно использовать, но делать это надо с умом — придерживаясь принципа минимальной достаточности.
Проблема с сингелтонами есть, а точнее с их ЗЛОУПОТРЕБЛЕНИЕМ.
Сингелтон ОЧЕНЬ часто лепят чтобы иметь глобальный доступ и только за этим, пытаясь прикрыть другой мотивацией. Но изначально то мотивация совершенно другая.
В результате мы гребем все проблемы связанные с глобальными объектами но только в квадрате.
Здравствуйте, Kazna4ey, Вы писали:
K>1) В чем преимущество этого паттерна перед классом со статическими методами?
Не понял. Обхясни на примере.
K>2) Приведите хотя бы пару примеров где РЕАЛЬНО помогает реализация данного паттерна?
Любой пример, где требуется:
1. Некоторое количество глобальных объектов в одиничном количестве
2. Гарантия существования этих объектов в момент любого обращения к объектам
Здравствуйте, Lloyd, Вы писали:
L>Благодаря этой "тонкости" рушатся все ваши дальнейшие умопостроения.
Вы ни разу не видели программы, которые повзоляют открыть несколько экземпляров представлений одного типа?
Здравствуйте, ArtDenis, Вы писали:
AD>Любой пример, где требуется: AD>1. Некоторое количество глобальных объектов в одиничном количестве AD>2. Гарантия существования этих объектов в момент любого обращения к объектам
Здравствуйте, Sni4ok, Вы писали:
S>Здравствуйте, minorlogic, Вы писали:
M>>В результате мы гребем все проблемы связанные с глобальными объектами но только в квадрате.
S>подскажите ваши рассуждение, каким вы образом степень вычеслили
Есть такой литературный прием ? метафора там и все такое , не слышали ? Проблемы хуже тем , что авторы сих сингелтонов опираются в своей уверенности на авторитетных авторов.
Здравствуйте, minorlogic, Вы писали:
M>Есть такой литературный прием ? метафора там и все такое , не слышали ? Проблемы хуже тем , что авторы сих сингелтонов опираются в своей уверенности на авторитетных авторов.
авторы каких синглетонов? вы бы код привели, а то нам сложно оценить насколько ваше мнение обьективное,
но я лично по своему опыту знаю, что синглетоны очень часто юзабельны и без них просто никак.
Здравствуйте, Sni4ok, Вы писали:
S>авторы каких синглетонов? вы бы код привели, а то нам сложно оценить насколько ваше мнение обьективное, S>но я лично по своему опыту знаю, что синглетоны очень часто юзабельны и без них просто никак.
У меня нет желания тебя переубедить , свое мнение и аргументы я высказал. Если хочешь исследовать тему, поищки информацию, например туже книгу "рефакторинг с использованием шаблонов"
Здравствуйте, Kazna4ey, Вы писали:
K>Здравствуйте! K> Есть несколько вопросов по поводу subj'а.
K>1) В чем преимущество этого паттерна перед классом со статическими методами? K>2) Приведите хотя бы пару примеров где РЕАЛЬНО помогает реализация данного паттерна? K>3) Почему у некоторых программистов такое отрицательное отношение к глобальным/статическим переменным/классам/методам и паттерну singleton?
K>Спасибо.
1. System.DBNull вроде singleton
2. В отличии от просто статических методов в случае singleton-а можно организовать полиморфизм. Из моей практики:
2.1 Разрабатывается трех-звенка, есть общая сборка, которая распологается и на сервере, и на клиенте. В этой сборке требуются глобальные настроичные параметры и методы. Реализация этих методов различна на сервере и на клиенте.
2.2. Разрабатывается несколлько продуктов, у которых есть общая функциональность. Общая функциональность выделяется в отдельную сборку. И опять таки, требуются настроичные глобальные методы и свойства.
В общей сборке делаем класс
public abstract class HomeBase
{
private static HomeBase instanceBase;
protected internal static HomeBase InstanceBase
{
internal get
{
return instanceBase;
}
set
{
instanceBase = value;
}
}
public abstract string[] GetLanguageCodes();
//тут может быть много абстрактных и не авбстрактных методов
}
В основной программе наследуем этот класс
public class Home : HomeBase
{
private Home()
{
}
private static Home instance = new Home();
public static Home Instance
{
get
{
return instance;
}
}
public void Init()
{
InstanceBase = this;
}
public override string[] GetLanguageCodes()
{
throw new NotImplementedException();
}
//...
}
Здравствуйте, Blondy, Вы писали:
B>1. System.DBNull вроде singleton
Это еще и stateless singleton. Для stateless синглтонов большинство критики недействительно.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, minorlogic, Вы писали:
S>>авторы каких синглетонов? вы бы код привели, а то нам сложно оценить насколько ваше мнение обьективное, S>>но я лично по своему опыту знаю, что синглетоны очень часто юзабельны и без них просто никак.
M>У меня нет желания тебя переубедить , свое мнение и аргументы я высказал. Если хочешь исследовать тему, поищки информацию, например туже книгу "рефакторинг с использованием шаблонов"
Прочитал всю ветку. Адепты использования синглетонов — в частности впечатление таковых создают kuj и ArtDenis — в начаде своих рассуждений об удобоваримости синглетонов бездоказательно используют один тезис, который в общем случае неверен. Тезис таков: если объект должен быть только один — значит его разумно сделать в виде синглетона. Ни у одного из вышеупомянутых товарищей я так и не нашел развернутой защиты или доказательства этого тезиса, а ведь этот факт ой-как неочевиден. В качестве примера цитата kuj:
K>2) Приведите хотя бы пару примеров где РЕАЛЬНО помогает реализация данного паттерна?
Там, где гарантированно должен существовать только один экземпляр класса.
Бездумное взятие на вооружение таких вот утверждений и приводит к печальным последствиям. Это все тем более странно, что на вопрос "Как можно добиться единственности экземпляра класса?" обычно любой вменяемый программист способен привести несколько вариантов.
P.S. Кстати, господа синглетонисты, по-вашему, какой вопрос имеет больший приоритет с точки зрения проектирования:
В чьи обязанности будет входить создание экземпляра класса? или Какой способ выбрать, что добиться единственности экземпляра класса?