|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
Масштабирование системы при использовании паттерна Singleton04.01.2017, 10:51. Показов 4777. Ответов 85
Метки нет (Все метки)
Добрый день, как доказать или опровергнуть, что архитектура теряет гибкость и расширяемость при активном использовании паттерна Singleton.
1
|
|
| 04.01.2017, 10:51 | |
|
Ответы с готовыми решениями:
85
Насчёт шаблонного паттерна SingleTon Необходима альтернатива при использовании Proxy паттерна
|
| 08.01.2017, 19:28 | |
|
gru74ik, да любыми - их море и выше уже многие написаны (скорее всего, пока детально не читал
) В С++/Жаве/С# - статическими полями/методами класса без создания экземпляров, в С++ из-за сишного наследия добавляется еще вариант свободных функций и глобальных переменных - хоть в отдельном нэймспейсе в виде сишного модуля (тут что-то писали выше про это). Но я подозреваю, что есть и еще варианты.
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 08.01.2017, 19:29 | |||
Посмотрите API для работы с MySQL и SQLite, они используют разные функции для работы с БД(но зачастую одинаковые по смыслу). В целом наследовать в плане БД-зависимых вещей почти нечего. Тут нужна конкретная реализация, а именно адаптер для каждой БД, который позволит сохранить единый интерфейс а под капотом реализации будут отличатся, для каждой БД - своя
0
|
|||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||
| 08.01.2017, 19:46 | ||||
Это к Hoggy. Добавлено через 5 минут Если однотипных сущностей две - это уже не синглтон, но сделать синглтон, который будет влиять на два экссинглтона, не представляется сложностью. Добавлено через 2 минуты
0
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 08.01.2017, 19:53 | |||
![]() Добавлено через 46 секунд О нем и речь
0
|
|||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 08.01.2017, 21:15 | ||
|
Не по теме: Кашу варим на потолке козы. Добавлено через 53 минуты Не по теме: Я понял, что Вы имели в виду. Добавлено через 5 минут Не по теме: И не понял каким боком тут полиморфизм. Его не было, нет и не будет: ничего не испорчено.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 08.01.2017, 21:30 | |||
Работа с разными реализациями как с единым типом это есть частный случай полиморфизма
0
|
|||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 08.01.2017, 21:48 | |
|
А вот я вырезку делаю из книжки GOF.
Обращаем внимание на дисплеи. И быстро проводим аналогию к БД. Неужто непохожие случаи? Там что-то было испорчено? Известные применения.
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 08.01.2017, 22:02 | ||
|
Там, где изначально одна форма, где у этой формы по природе своей других форм никогда не существовало, полиморфизма нет и быть не может. Если появляется другая форма такого же типа, то есть возможность полиморфизма, и существует соблазн к полиморфизму, но он не обязательно доступен. Если при всей недоступности полиморфизма, но при наличии большого числа других возможностей, бракуется какой-то принцип, то это только по причине полиморфизма головного мозга, а не по причине убыточности принципа.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 08.01.2017, 22:18 | ||
|
Усилия конкретно в данном случае будут настолько минимальные что вести речь об этом даже и не стоит. И не придется браковать один из доступных и удобных принципов Ладно...
0
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 08.01.2017, 23:12 | |
|
Ну. Я кое в чём солидарен.
Просто, если бы идеология паттерна "синглтон" доносилась немного в другом ключе, то было бы, наверное, как-то лучше: Если создавать второй экземпляр класса неестественно и опасно, используйте правильный синглтон. Как-нибудь так. Слово "правильный" мной употреблено только от того, что нет оптимальной реализации шаблона синглтон, но есть семейство реализаций, с которого можно выбрать.
0
|
|
|
Комп_Оратор)
|
||||||||||||
| 09.01.2017, 00:06 | ||||||||||||
|
Это шутки. Но если серьёзно, то для использования полиморфного наследования, хочется пример.Я пока увидел только перегрузку операторов. Дело было так:
То есть в коде можно использовать имя экземпляра NEW со скобками или с квадратными скобками, выделяя память под одиночные объекты или под
0
|
||||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||
| 11.01.2017, 13:04 | |||||||||||||
|
проблема DI - на многострадальную голову пользователей начинают вываливаться куча всяких архитектурных подробностей: интерфейсы, реализации, etc. годный механизм работы с бд должен инкапсулировать все сложности/подробности внутри себя, не напрягая ими пользователей. мы ж просто добавляем поддержку ещё одной базы, но интерфейс сингелтона же не меняется. где то в коде, где нибудь в майне вместо:
1
|
|||||||||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 11.01.2017, 14:23 | |||
![]() Насколько я понял, вы предлагаете вызывать getInstance() от T, вместо указания конкретного типа? Это конечно решает проблему расширяемости(но не в общем, а именно в С++, потому что если говорить об ООП в целом, в многих или даже всех остальных языках нет шаблонов). Но даже в таком случае на каждую модель(если говорить в контексте MVC, тобишь каждый дата-провайдер) который использует этот T будет сгенерирован ровно столько раз сколько у нас будет типов БД в поддержке, разве нет? А что если таких дата провайдеров пол сотни или более? В реальных программах такое часто бывает. В итоге получим приличный оверхед в исходном коде. Но не уверен, может компилятор хотя бы частично сможет применить определенную оптимизацию при генерации исполняемого кода. Добавлено через 12 минут Но тем не менее данная стратегия языкозависимая и все таки думаю приводит к оверхеду по исходному коду
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
| 11.01.2017, 14:41 | |||||||||||
|
чем меньше всего нужно знать, помнить, и держать в голове, тем лучше. что именно не понятно в приведем кусочке?
MYSQL и POSTGRESQL - это могут быть обычные enumпри этом его совершенно не парит, как именно сингелтон будет это обеспечивать. там, под капотом могут быть те же самые адаптеры, о которых вы писали выше. но они запрятаны внутри сингелтона. наружу ничего не торчит. и поэтому, пользователям не нужно знать про их существование, только для того что бы пользоваться. мы находимся в ветке с++, именно с++ специфику. и мы используем всю мощь и выразительность этого языка. Добавлено через 2 минуты
0
|
|||||||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||||||||
| 11.01.2017, 16:47 | |||||||||
![]() Добавлено через 6 минут
0
|
|||||||||
|
Любитель чаепитий
|
|||||||
| 11.01.2017, 17:01 | |||||||
0
|
|||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 11.01.2017, 17:06 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||||||
| 11.01.2017, 17:46 | |||||||
Добавлено через 3 минуты И адаптеры естественно будут созданы один раз, для простоты передал без переменной а то и так кода много но пусть не обманит вас много кода, главное обсуждение в том как просто происходит переключение между источниками данных при этом имеем повторное использование кода Добавлено через 3 минуты И нет необходимости в каждой функции дата провайдера выяснять какой адаптер использовать как это сделано у вас А если таких провайдеров и функций сотни? ![]() Добавлено через 10 минут Можно даже для определения source на if Не проверять а создать map, где ключом будет source, а значением - адаптер Просто достаем в зависимости от запроса из map указатель на нужный адаптер подставляя запрос пользователя в map как ключ и пользуясь значением этого ключа(адаптером) дергаем data source
0
|
|||||||
|
Любитель чаепитий
|
|||||||||
| 11.01.2017, 17:49 | |||||||||
2
|
|||||||||
| 11.01.2017, 17:49 | |
|
Может ли потребоваться применение механизма событий при использовании паттерна MVVM?
Постоянно прохожу проверку CAPTCHA при использовании поисковой системы Collections: singleton/singletonList/singletonMap. Что значит слово singleton? Установка "лимита" на значение решения системы ОДУ при использовании решателя ode45 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|