На столько ли плохи синглтоны?
Всем привет. Очень избитая тема, НО ДО СИХ ПОР не дает покоя, стремление к идеалу (делать идеально проект / код) заставляет постоянно думать об этом.
Сразу скажу что: речь именно про объекты одиночки, в том числе сингл. игра где всегда будет один игрок.
речь про домашний проект, но я всегда думаю про крупные фирмы (например делал бы ведьмака, как там быть, вряд ли там используют синглтоны).
Не совсем понимать эти слова:
Вы не сможете просто взять и использовать класс, зависящий от одиночки в другой программе. Для этого придётся эмулировать присутствие одиночки и там.
А типа если через зависимости:
public Player Player {private get; set;}
То у вас не будут проблемы с переносом класса? Что за бред, у вас будут те же проблема, вам так же нужно будет у класса игрока ставить все функции что были в вашей программе. Отличие только в том что вместо кода "Player" вы пишите "Player.Instance" и все.
Я понимаю делать через зависимости (я написал выше пример, когда кто то главный ставит тебе ссылки), но это порождает кучу лишнего кода (это пол беды) и главное множество лишних операций программы.
Допустим у меня есть отдельная подгружаемая сцена (Unity) в которой 10 объектов, им всем нужна 1 ссылка на игрока (что бы вызвать метод при уничтожении например). Мне придется изначально создавать список в этой сцене (или хуже того, динамически искать компоненты), который будет ссылаться на эти 10 объектов, после загрузки сцены мы обходим список и всем 10 объектам ставим ссылку. Вместо того что бы просто в нужный момент вызвать "Player.Instance.Method()"?
То есть мы жертвуем: храним в памяти список с ссылками (кол. * 6-8 байт (забыл сколько точно в Unity занимает ссылка), + обход в массиве + получение элементов по индексу + установка зависимости через метод доступа set;
И все это ради того, что бы не использовать синглтоны верно?
Интересует мнение опытных людей. Может кто видел исходники ААА игр, есть ли полностью на синглтонах игры?
Servicio de atención al cliente por UserEcho
Отличная тема для холивара!
Лично я считаю, что если что-то избавляет вас от боли, то берите и используйте это. Не надо оглядываться на кого-то. Если в итоге вы упрётесь в какое-то ограничение или неудобство, которое было неочевидно ранее, вы практически всегда можете отрефакторить всё обратно, хоть и потратив большие усилия.
Я действительно призываю использовать одиночки поменьше, но адресую это скорее новичкам, т.к. сперва одиночка кажется удивительно удобной штукой без каких-либо минусов.
В одном проекте реализовывал с целью снижения обращения к памяти точнее ее повторного использования
суть - при обращений к полю объекта проверить возможность пользователем на просмотр этого поля , редактирование итд. каждое поле проверяеться отдельно - такова структура ее измениния слишком дороги для системы.
переписать модель разбора политик то же не представляеться возможным в связи с тем что 60 % данных обрабатываються хранимиыми процедурами oracle сервера
несмотря на кеширование мне приходиться каждый раз получать 13 мб массив (промышленная система)
обход этого массива составлял 25 сек с учеом всех проверок.
После сохранеиния однотипных данных в синглтон скорость обработки возрасла до 2 сек
Забыл отметить что код писан на PHP то есть переменные сушествуют на момент запроса к серверу.
Вообщем суть месседжа - стремление сделать все как надо очень сильно конфликтуют с задачами бизнесса, для себя принял решение все делать по мере необходимости и там где это оправданно