avva: (Default)
[personal profile] avva
Программистов на C++, злоупотребляющих singleton-ами, на том свете посадят каждого на тыщу лет в одиночную камеру.

Date: 2005-03-01 06:29 pm (UTC)
From: [identity profile] shmop.livejournal.com
Обьясните, мне , начинающему, почему... Не то чтобы я злоупотреблял, но не вижу в singleton-ах каких либо подвохов.

Date: 2005-03-01 06:37 pm (UTC)
From: [identity profile] object.livejournal.com
От 90% синглтонов можно избавиться без вреда для окружающих. Подвох примерно такой же, как и в глобальных переменных.

Date: 2005-03-01 06:42 pm (UTC)
From: [identity profile] avva.livejournal.com
Но если "избегайте глобальных переменных!" средненькому программисту на C++ кто-то успел когда-то вбить в голову, то насчёт синглтонов, скорее всего, нет.

Date: 2005-03-01 06:44 pm (UTC)
From: [identity profile] slv.livejournal.com
потому что, вот как у меня например
о! паттерны! и понёсся куда попало их пихать
потому что круто.
но это проходит.

Date: 2005-03-01 08:27 pm (UTC)
From: [identity profile] avva.livejournal.com
Так вот, не у всех проходит :(

Date: 2005-03-01 06:44 pm (UTC)
From: [identity profile] shmop.livejournal.com
Избегать - да, но если другого выхода нет...

Date: 2005-03-01 11:55 pm (UTC)
From: [identity profile] bugabuga.livejournal.com
Какая наивность :) В первую-же неделю работы на новом месте пришлось править мозги сишной программе, и в ней ВСЕ переменные (ну разве что кроме парочки для циклов) оказались глобальными %)В ответ на возмущённый писк сказали, что программистка тренировалась на мэйнфреймах :)

Date: 2005-03-01 06:43 pm (UTC)
From: [identity profile] shmop.livejournal.com
А зачем избавлятся, я надеюсь никто не захочет создавать синглтон просто так, для этого наверняка есть причины, как и для глобальных переменных.

Date: 2005-03-01 06:45 pm (UTC)
From: [identity profile] glo-ku.livejournal.com
Зето ное вилбудет "злоупотреблением" ;)

Date: 2005-03-02 05:27 am (UTC)
From: [identity profile] cema.livejournal.com
Вилбудет? Вирдное вордоюзение.

Date: 2005-03-01 07:31 pm (UTC)
From: [identity profile] object.livejournal.com
Конкретный пример из личного опыта. Был написан SMS-сервер, поддерживающий архитектуру плагинов для различных операторов. Т.е. загрузив соответствующие плагины, можно было принимать и получать смс-ки операторов мобильной связи разных стран. Каждый плагин писался как DLL. При написании плагина для очередного оператора выяснилось, что они используют ту же библиотеку, что и уже подключенный, но в библиотека та реализована синглтоном, т.е. независимое использование библиотеки в одном процессе для двух операторов не предусмотрено. Пришлось реализовывать обмен данными между процессами, что было несложно, но существенно повлияло на быстродействие. Создатели той библиотеки наверняка думали, что создают синглтон не просто так.

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

Date: 2005-03-01 10:43 pm (UTC)
From: [identity profile] serejik.livejournal.com
Хорошее объяснение, к сожалению оно верно :-)

Date: 2005-03-02 02:57 am (UTC)
From: [identity profile] arbat.livejournal.com
Знаете ли, мне и изначальный сентимент и Ваше объяснение... Ну, это как мой начальник на прошлой работе заявил, посмотрев мой код, что, мол, "у нас в группе эксепциями и ассертами не пользуются". - "почему?" - спрашиваю, а он мне - "мы пришли к выводу, что, когда мы ими пользуемся, программа становится нестойкой и все время падает".

Date: 2005-03-02 06:26 am (UTC)
From: [identity profile] object.livejournal.com
А причем здесь это? Вы, судя по всему, говорите о чьем-то неумении использовать exceptions. Мой пример - о неуместном использовании синглтонов. Которыми многие пользуются как глобальными переменными.

Date: 2005-03-02 06:17 pm (UTC)
From: [identity profile] http://users.livejournal.com/_ai_/
Мне один раз начальник сказал, что в Goldman Sachs конструкцией ?: не пользуются. Я решил что пора менять работу. И был прав.

Date: 2005-03-02 05:01 am (UTC)
From: [identity profile] quieres.livejournal.com
Это не аргумент против синглотонов. Это камень в огород проектировщика.

Date: 2005-03-02 06:22 am (UTC)
From: [identity profile] object.livejournal.com
Это аргумент против использования синглтонов где попало.

Date: 2005-03-01 08:27 pm (UTC)
From: [identity profile] avva.livejournal.com
Хаха, Вы очаровательно наивны ;)

Date: 2005-03-01 06:50 pm (UTC)
From: [identity profile] sartoris.livejournal.com
На моей практике был ОДИН случай, когда пришлось мучаться с singleton-ами (да еще и в template классе...) И всё. В остальных случаях избегал этой гадости... В частности из-за нечитабильности. Хотя по идее работать должно быстро, потому как в обход многих C++-тонелей.

Date: 2005-03-01 06:53 pm (UTC)
From: [identity profile] meshko.livejournal.com
(поеживаясь)
А можно пример злоупотребления?
То есть у меня они почти всегда есть, ну один-два. Типа database connection pool, или там logger, ну или ещё какой-нибудь другой pool.

Забавное: http://c2.com/cgi/wiki?SingletonPattern
Creating a singleton representing the graphics card is a good example of this. Each machine is likely to have only one graphics card (that you're interested in), but you may want to support more than one card in your application.

Интересный пример, учитывая, что две видеокарты в одном компьютере сегодня явление может и не повседневное, но всеми нормальными операционками поддерживаемое.

Date: 2005-03-01 06:54 pm (UTC)
From: [identity profile] -alien.livejournal.com
(ех, давно саблю в руках не держал), а в вашем си с плюсиком есть ли DCL-проблема; праздное любопытство.

Date: 2005-03-01 07:11 pm (UTC)
From: [identity profile] iratus.livejournal.com
перефразирую: Программистов на C++, злоупотребляющих multiple inheritance , на том свете посадят каждого на тыщу лет в одиночную камеру.

Date: 2005-03-01 07:29 pm (UTC)
oryx_and_crake: (Default)
From: [personal profile] oryx_and_crake
За multiple inheritance по логике вещей надо в общую сажать.

Date: 2005-03-01 07:32 pm (UTC)
From: [identity profile] object.livejournal.com
Здесь надо бы добавить, что речь идет о наследовании классов, а не интерфейсов.

Date: 2005-03-01 07:50 pm (UTC)
oryx_and_crake: (Default)
From: [personal profile] oryx_and_crake
тогда - заставить пользоваться одной общей миской...

Date: 2005-03-01 10:25 pm (UTC)
From: [identity profile] ohtori.livejournal.com
В коммунальной квартире жить! Тыщу лет!
Вот настоящий ад.

Date: 2005-03-01 07:41 pm (UTC)
From: [identity profile] iskatel.livejournal.com
За что? Никак, ты чужой код правишь? Не повезло..
(deleted comment)

Date: 2005-03-01 08:19 pm (UTC)
From: [identity profile] scolar.livejournal.com
На курсы отправить ещё при жизни.

Date: 2005-03-01 08:18 pm (UTC)
From: [identity profile] scolar.livejournal.com
Singleton должен быть один. Для обеспечения этого следует использовать Singleton.

Date: 2005-03-01 08:26 pm (UTC)
From: [identity profile] avva.livejournal.com
Отлично ;)

Date: 2005-03-01 08:56 pm (UTC)
From: [identity profile] drakkh.livejournal.com
особенно плохо передирать реализацию из книжки Design Patterns - там конкретный баг :)

Date: 2005-03-01 11:29 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Именно любыми singleton-ами, а не только stateful?
(Впрочем, stateless и злоупотребить сложно.)

Date: 2005-03-01 11:35 pm (UTC)
From: [identity profile] avva.livejournal.com
Да ладно, stateful stateful'у рознь ;)

Date: 2005-03-01 11:50 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Конечно. Но ими хоть как-то можно злоупотребить (помешать многониточности, например).

Хотя, наверное, и stateless-ами можно злоупотребить, хотя не так неприятно: можно сделать stateless singleton бутылочным горлышком (опять же помешать многониточности).

Date: 2005-03-02 03:01 am (UTC)
From: [identity profile] msh.livejournal.com
Под двойной проверенный замок!

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 28th, 2025 10:16 pm
Powered by Dreamwidth Studios