yigal_s' Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Friday, February 3rd, 2012

    Time Event
    11:08a
    немножко гона
    Синглтон в программировании - это, мне кажется, типичнейший пример догматического мышления, пример, когда не самые разумные идеи каких-то авторитетов и, без иронии, умных людей, подхватываются и безумно, бездумно принимаются на веру и воспроизводятся тысячекратно.

    Кто вообще придумал такой бред, что у некоторого класса может быть всего один инстанс? Что это за херня такая? Ну пусть это будет Лог, пусть это будет Экран, пусть это будет хоть, блядь, Земной Шар. Но кто вам сказал, что завтра вам не понадобится два лога, два экрана, два земных шара? Какого хуя вообще класс должен что-то знать о количестве собственных инстанциаций и как-то их регулировать?

    Далее, если мы осознАем, что идея класса с единичной инстанциацией, заданной в нём самом - бредова, то нам останется признать, что самая обычная именованная глобальная переменная является синглетоном. Еще раз: обычная глобальная переменная - это и есть синглетон. А если кто-то из вас считает, что глобальные переменные использовать нельзя, то по тем же причинам ему придется и синглетон забраковать.

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

    Ну да. Но какое отношение стратегии инициализации имеют к синглетонности? А вам не приходило в голову, скажем, что и к глобальной переменной хорошо бы тупо добавить какие-то стратегии инициализации, а не превращать их хрен знает зачем вместо этого в какой-то эзотерический синглытон????

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

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

    << Previous Day 2012/02/03
    [Calendar]
    Next Day >>

About LJ.Rossia.org