Comments 14
Может глупый вопрос, но чем отличается от export const dataBase = new DataBase()
? При импорте из разных мест придет один и тот же инстанс по правилам ES Imports. И DI соответственно class { private dataBase = dataBase; }
без контейнера, передающего значение через декоратор.
Чтобы этого не случилось — и закрывают конструктор.
Сборка упадет и он поправит, это же обычная опечатка. Получается этот паттерн через getInstance неактуален? Ни разу не видел в современных проектах, везде просто готовый инстанс экспортируется
В том и суть — мы часто пользуемся паттернами, зная о них, но воспринимая поведение как должное. Машина ездит и хорошо, красная такая. А сколько колец на клапане обжимных — современный водитель не в курсе)
И DI соответственно class { private dataBase = dataBase; } без контейнера, передающего значение через декоратор.
Это уже не DI :)
За DI на самом деле стоит SRP, то есть класс не занимается резолвом зависимостей самостоятельно — это не его задача. А синглтон может и перестать быть синглтоном.
Выбирая Singleton, стоит также помнить, что небрежное использование глобальных объектов может приводить к проблемам масштабируемости, контроля за многопоточностью, написания модульных тестов и в целом следования принципам TTD.
Без объяснения всего вот этого тема не раскрыта.
Singleton отличается от глобальной переменной только одним: он «ленивый». Т.е. если никто ни разу не запрашивает обращение к БД, то и соединение не откроется.
Все, больше нет отличий, во всем остальном это — такая же глобальная переменная, с той же самой кучей минусов.
Маскирует плохую архитектуру.
Но это проблемы не Синглтона, это проблемы архитектуры. Да и как он её тогда маскирует, если из статьи, на искусственных примерах, призванных подчеркнуть что этот паттерн зло, получается: «используется Синглтон — у тебя плохая архитектура»?
Нарушает принцип единственной ответственности класса.
Здесь абсолютно непонятно почему и ни слова об этом в статье не сказано.
Создает проблемы контроля многопоточности.
Это тоже никак не выводимо из текста статьи.
Вывод — надо уметь пользоваться инструментами и не делать из них карго-культа.
Security с характером, или еще несколько слов о паттерне Singleton