Ответ вслух Middle SOLID и принципы обновлено

Модуль и синглтон

Вопрос

Что такое модульный паттерн и синглтон? Чем синглтон опасен?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Модульный паттерн - сокрытие внутреннего состояния за публичным интерфейсом; исторически это IIFE с замыканием, сейчас - обычный ESM-модуль. Важная деталь: модуль ES уже синглтон - он выполняется один раз при первом импорте, дальше все получают тот же экземпляр.

Что должно прозвучать в ответе

  • модуль скрывает внутренности и отдаёт публичный интерфейс

  • в ESM модуль и так синглтон - выполняется один раз, кэшируется

  • синглтон - единственный экземпляр с глобальной точкой доступа

  • опасность: скрытая глобальная зависимость, тесты влияют друг на друга

  • в SSR синглтон на сервере делится между запросами пользователей

  • лечение: передавать экземпляр явно или создавать на запрос

Что могут спросить следом

  • Почему синглтон опасен именно в SSR
  • Как изолировать состояние между тестами
  • Когда глобальный кэш на клиенте оправдан

Разбор

Модульный паттерн - сокрытие внутреннего состояния за публичным интерфейсом; исторически это IIFE с замыканием, сейчас - обычный ESM-модуль.

Важная деталь: модуль ES уже синглтон - он выполняется один раз при первом импорте, дальше все получают тот же экземпляр. Поэтому export const cache = new Map() - это глобальное состояние со всеми вытекающими.

Чем опасен: зависимость скрыта (по сигнатуре функции не видно, что она читает глобальный стор), тесты начинают влиять друг на друга через общее состояние, а в SSR один экземпляр на процесс разделяется между запросами разных пользователей - это готовая утечка данных между клиентами.

Лечение: либо передавать экземпляр явно, либо создавать его на запрос.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.