Где найти синглтон в node.js с модулями? - PullRequest
0 голосов
/ 20 ноября 2018

В javascript есть много вопросов о шаблоне синглтона.Все ответы, которые я нашел, рекомендуют:

  • IIFE, который производит фабрику, спрятанную в крышке.Затем, используя эту фабрику, мы можем вызвать getInstance()

  • , чтобы избежать использования require (и модуля node.js) как способа получения синглтона.

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

  • сохранить фабрику в глобальной переменной или
  • позволить сценарию верхнего уровня управлять созданием экземпляра синглтона (ипередать его другим модулям)

один из них лучше другого?есть ли другие способы?

1 Ответ

0 голосов
/ 21 ноября 2018

Node.js уже предоставляет способ создания синглетонов.Модули CommonJS (то же самое относится и к другим модулям JS) оцениваются один раз при их первом импорте, поэтому экспортируемый объект остается единичным.Это естественное поведение для платформы, которое можно использовать как практическое правило.

Это поведение модулей Node.js может быть переопределено с помощью require искажения кэша, например, decache,Возможное использование - тестирование.Другой вариант использования - это взлом стороннего модуля NPM для , а не для создания синглтона, если это желаемое поведение, в противном случае потребуется его форк.

для сохранения фабрики в глобальной переменной

Использование глобалов в модульных средах, как правило, не рекомендуется.

позволяет сценарию верхнего уровня управлять созданием экземпляра singleton (и передавать его другим модулям)

Это шаблон внедрения зависимостей.Он может использоваться там, где это необходимо, но обеспечивает дополнительные издержки, если приложение не использует преимущества шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...