Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
97 / 11 / 1
Регистрация: 14.03.2017
Сообщений: 196

Синглтон и стиль написания кода (теория)

16.02.2020, 17:08. Показов 6328. Ответов 86
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, тут диспут о правильном написании кода.

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

З.Ы. Я в курсе, что синглтон - это антипаттерн.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.02.2020, 17:08
Ответы с готовыми решениями:

Стиль написания кода(читабельность и прочее)
Недавно делал тестовое задание для поиска работы, но мне сказали, что код не совсем корректно написан. Задание:Написать рекурсивный и не...

Стиль написания кода
Всем привет! Просматривал исходники Perl и обратил внимание на то, что стиль написания кода который представлен ниже, очень короткий по...

Стиль написания кода
Имеется внешний класс. Внутри этого внешнего класса объявлен private static класс. Клиенты внешнего класса не имеют представления о...

86
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
20.02.2020, 18:36
Студворк — интернет-сервис помощи студентам
avgoor,
Ок уберите приставку get. Где вы увидели что я об этом говорил? Об это речи не было, поэтому мне не понятны ваши претензии. Ок, объясните мне тогда что такое синглтон, сделайте доброе дело.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.02.2020, 18:37
avgoor, Шлее утверждает, что QApplication не реализован как синглтон. Хотелось бы видеть) Но да, понятие о синглтоне и его месте уже легенда. Есть люди которые предпочитают пепельницу велосипеду поскольку велосипедом неудобно ковырять в ухе.
Передача свойств типа в виде параметра шаблона может решать и решает много задач. Но состояние сохраняемо только в виде статических данных (если не предполагается создание объекта). С методами та же история. При чём тут сиглтон? Не говоря уже о том, что и сиглтон может быть параметризован.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
20.02.2020, 18:39
А потом посмотрим вместе на то что мои слова никак не идут в разрез с идеей синглтона

Добавлено через 1 минуту
avgoor,
IGPIGP,
Я думаю вы просто не поняли/не разбирали пример. Приведите конкретные претензии или это разговор ниочем
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.02.2020, 18:41
Цитата Сообщение от Undisputed Посмотреть сообщение
объясните мне тогда что такое синглтон, сделайте доброе дело.
Легче сказать уже что он не такое. Он может решать задачу сервера БД и нет может решать задачи клиента в многопользовательском режиме. Хотя при желании и зайца можно научить курить.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
20.02.2020, 18:41
QApplication я упомянул как пример обьекта приложения. Это вспомогательный класс и не относится напрямую к обсуждаемому вопросу.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.02.2020, 18:46
Цитата Сообщение от Undisputed Посмотреть сообщение
Я думаю вы просто не поняли/не разбирали пример. Приведите конкретные претензии или это разговор ниочем
Он не о чём, - да. Вы показали случай когда сиглтон решили развалить. А создан он был нерасширяемо в том смысле в котором жизь потребовала его расширить. Вы отказались от его использования, поскольку нельзя потребовать чтобы синглтон стал даблтоном и победно окинули окрестности Аустерлица с вопросом: -"A за чем он нужен, когда и без него хорошо?".
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.02.2020, 18:49
Undisputed,
спасибо за хороший материал.

вот примерно такое я и хотел прочитать.
я попозже отвечу.

Цитата Сообщение от avgoor Посмотреть сообщение
вы не понимаете, что такое синглтон и когда его использовать.
а ты понимаешь?

расскажешь, что это за фрукт, и как его правильно кушать?
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
20.02.2020, 18:55
IGPIGP,
Как понять развалить? Был синглтон который потом был вытеснен Di. Самое занятное здесь то, что конкретных претензий в по моему примеру до сих пор нет, вместо этого идут сообщения в духе "ты ничего не понимаешь, иди учись". Именно по этой причине разговор ниочем.

Добавлено через 1 минуту
hoggy,
Ок, не за что интересно твоё мнение
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
20.02.2020, 19:02
Может где-то и вытеснен, однако пара моих свежих ИДЕ заботливо предлагает мне пункт Синглтон в перечне того, что может помочь создать Но я ее не слушаю, и костылю все в статические поля или в поля объекта Аппликейшен, который менеджится уже системой как хочет. А про синглтоны я только стихи пишу, плагиатя у Лермонтова. IGPIGP знает
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.02.2020, 19:06
Undisputed,
C++
1
2
3
4
5
6
7
8
9
10
void run()
{
    //while (true)
    {
        std::string request_uri;
        std::cin >> request_uri;
 
        // теперь роутер это поле класса Application
        // и пользователь может внедрять любой роутер в класс Application
        if (router.hasMatch(request_uri)) {
не увидел откуда имя router ?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
20.02.2020, 19:10
Цитата Сообщение от IGPIGP Посмотреть сообщение
Шлее утверждает, что QApplication не реализован как синглтон. Хотелось бы видеть)
У меня в бумажном виде. Можно поточнее, где?
В любом случае, объект приложения - может быть только один. Как происходит его создание - вторично. Синглтон - не кусок кода для ctrl-c ctrl-v - а паттерн. Соответственно - это все детали реализации. Причем не только в Qt, а в любом фрэймворке.
Цитата Сообщение от Undisputed Посмотреть сообщение
QApplication я упомянул как пример обьекта приложения. Это вспомогательный класс и не относится напрямую к обсуждаемому вопросу.
Напрямую относится. Вы не видите синглтон, там где он есть и должен быть, и пихаете его туда, где он не нужен.

Цитата Сообщение от Undisputed Посмотреть сообщение
Пока все ок. Пользователи нашего фреймворка рады. Спустя некоторое время часть пользователей стала возмущаться по поводу предоставляемого роутера http запросов. Претензии были таковы: регулярные выражения дорого обходятся, а некоторые запросы вообще не нуждаются в параметрах! Добавьте нам более легковесный роутер (без регулярок) но менее гибкий а там мы сами разберемся какой роутер и когда использовать. Ок сказали мы и написали код нового роутера - LiteralRouter, который умеет обрабатывать запросы не так гибко как RegExpRouter.
ОК. Не было синглтона. Сразу было DI (хоть это и не связано друг с другом). Что инжектить то? Какой тип? Если у вас ничего нет кроме изначального типа RegexRouter, или как там его. Нужно было до того, как вы написали LiteralRouter, выделить общий интерфейс всех будущих роутеров и использовать его везде. Если вы не предусмотрели этого с самого начала - придется рефакторить. А как вы будете получать интерфейс роутера - через синглтон или через конструктор - дело десятое. Проблема не в синглтоне, а в архитектуре.
Как вам неоднократно говорили - проблема не в синглтоне, а в архитектуре приложения.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.02.2020, 19:10
Цитата Сообщение от _Ivana Посмотреть сообщение
А про синглтоны я только стихи пишу, плагиатя у Лермонтова.
Белеет паттерн одинокий,
В тумане мыслей, - голубой ( жуть как ему достаётся бедному )
Да классика несокрушима.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
20.02.2020, 19:11
Цитата Сообщение от IGPIGP Посмотреть сообщение
не увидел откуда имя router ?
там в комментариях я отметил что это поле класса Application
но в классе его не отметил потому что:
1. и так много буков было
2. надеялся что будет понятно и без создания поля явным образом
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.02.2020, 19:19
Цитата Сообщение от avgoor Посмотреть сообщение
У меня в бумажном виде. Можно поточнее, где?
Qt5.10 Профессиональное программирование на C++
стр.30 Модуль QtCore - последняя фраза: Такой подход может избавить вас от нежелательного использования шаблона проектирования Singleton.

Добавлено через 2 минуты
Цитата Сообщение от Undisputed Посмотреть сообщение
там в комментариях я отметил что это поле класса Application
Так там что - шаблонный класс или указатель базового? Типы то у роутеров разный как их в одно поле воткнуть.
Цитата Сообщение от Undisputed Посмотреть сообщение
. и так много буков было
Ничего. Добавьте.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
20.02.2020, 19:21
Цитата Сообщение от avgoor Посмотреть сообщение
Не было синглтона.
Было. И не шло никак вразрез с идеей синглтона.
Цитата Сообщение от avgoor Посмотреть сообщение
Что инжектить то? Какой тип?
Странный вопрос. Какой требуется, такой и инжектить.
Цитата Сообщение от avgoor Посмотреть сообщение
Нужно было до того, как вы написали LiteralRouter, выделить общий интерфейс всех будущих роутеров и использовать его везде.
Ну раз я привел такой пример - то вы должны были догадаться что мне это понятно. Это не совсем то ради чего писался пример.
Цитата Сообщение от avgoor Посмотреть сообщение
А как вы будете получать интерфейс роутера - через синглтон или через конструктор - дело десятое.
Но то что синглтон стал избыточным в рамках обсуждаемого вопроса это дело первое, а не десятое. Собственно это одна из причин по которой пришлось много текста писать.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
20.02.2020, 19:23
Цитата Сообщение от IGPIGP Посмотреть сообщение
Такой подход может избавить вас от нежелательного использования шаблона проектирования Singleton.
У меня 5.3 стр 49.
Но он пишет, что не придется писать свои синглтоны, а не что
Цитата Сообщение от IGPIGP Посмотреть сообщение
что QApplication не реализован как синглтон
Добавлено через 1 минуту
Цитата Сообщение от Undisputed Посмотреть сообщение
Но то что синглтон стал избыточным в рамках обсуждаемого вопроса это дело первое
Дело первое, что:
Цитата Сообщение от avgoor Посмотреть сообщение
Вы не видите синглтон, там где он есть и должен быть, и пихаете его туда, где он не нужен.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.02.2020, 19:24
Цитата Сообщение от avgoor Посмотреть сообщение
В любом случае, объект приложения - может быть только один.
Это да. Но ядро у него тоже одно. Объект конфигурации (на момент когда он уже выбран - т.к. может тоже быть обобщён как стратегия) тоже. Есть вещи которые удобны в единственном числе. Как говориться: -"Одна голова - хорошо, а две - уже как-то и не краcиво."
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
20.02.2020, 19:29
Цитата Сообщение от avgoor Посмотреть сообщение
Вы не видите синглтон, там где он есть и должен быть, и пихаете его туда, где он не нужен.
Спасибо за вашу точку зрения. Не в обиду, но помоему вы не до конца поняли что здесь обсуждается
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
20.02.2020, 19:46
Цитата Сообщение от Undisputed Посмотреть сообщение
Не в обиду, но помоему вы не до конца поняли что здесь обсуждается
А вы до конца поняли?
Тогда объясните мне дураку разницу между
C++
1
2
3
4
RegexRouter r;
LiteralRouter l;
MyController m(&r);
MyOtherController m2(&l);
и
C++
1
2
3
4
Router *r = Routers.GetInstance<RegexRouter>();
Router *l = Routers.GetInstance<LiteralRouter>();;
MyController m(r);
MyOtherController m2(l);
Когда применять первое, когда второе и почему?
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
20.02.2020, 20:02
avgoor,
Не совсем понятно что вы имеете ввиду. Если речь о том что два примера идентичны по смыслу, то первый вариант предпочтительнее.
Потому что суть передачи объекта в контроллер в данном случае заключается в том что бы контроллер мог его использовать. Контроллеру все равно этот объект синглтон или нет. Он этим фактом или его отсутствием никак не пользуется. Отсюда можно сделать вывод что синглтоновость роутеров в контексте контроллера ничего полезного в себе не несет. Следовательно синглтоны у нас в избытке.

Если же это не то о чем вы спрашивали то уточните свой вопрос...

Добавлено через 3 минуты
Цитата Сообщение от Undisputed Посмотреть сообщение
Следовательно синглтоны у нас в избытке.
Здесь стоит добавить что данный факт всплыл только после добавления Di.
Перед Di избытка не было т.к синглтон был применен к месту.
Но в итоге одно вытеснило другое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2020, 20:02
Помогаю со студенческими работами здесь

Стиль написания кода. Отступы
Что лучше: проблелы или табуляция? Ибо поначалу я слышал и был уверен что лучше использвать табуляцию. Но сейчас используя sublime text c...

Оцените на правильность кода и общий стиль написания
Приветствую всех :) В кои-то веки решил начать изучать Java, наткнулся на некий курс, в котором подробно разбирается MVC, а параллельно...

Синглтон вызывает синглтон
Привет. Что-то запутался. Есть Синглтон(надеюсь я его правильно сделал): public class Table extends JTable { private static...

Правила написания кода
Всем привет!Читала о правильном написании кода, отступы, что был &quot;елочкой&quot;, но до меня так и не дошло, как это на практике делается. Буду...

Правила написания кода
Я вот до сих пор не понимаю, как происходит такая вещь. Допустим: у меня есть Главная страница сайта &lt;b&gt;index.php&lt;/b&gt; и есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru