Рубрики
Без рубрики

Путь Node.js – Di VS Модуль требует?!

Простой вопрос и обсуждение вокруг модуля di vs.require. Теги с обсуждением, JavaScript, узел, обучением.

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

Сегодня тема – это инъекция зависимости против модулей, которые, если я работал повсеместно с другими разработчиками, я мог легко найти ответ. Увы, я должен был пойти на различные удаленные ресурсы, такие как Stackexchange , Средний , RisingStack и доверие Google , где чаще всего я встречался с устаревшими примерами, предвзятые взгляды с 10 лет назад, и некоторые красивые пламя войн вокруг того, почему вопрос оригинаторов неверно с самого начала. Я здесь, чтобы получить просветление от сообщества, которое открыто для обсуждения.

TLDR; Что является предпочтительным механизмом для вытягивания в зависимости от других модулей внутри других.

Мой нынешний проект, который я обнаружил, что мой основной файл «App.js» требует в кучу модулей, чтобы соединить руку, чтобы снизить функциональность, которая имеет зависимости от этих модулей верхнего уровня. Как правило, это может быть (я упростил это массово):

const MQTTClient = require('./mqtt')
const Router = require('./router')
const client = MQTTClient .start('hostname')

const messageRouter = Router.init(client,{options})

client.on('message',messageRouter.handleMessage(topic, payload))

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

  • Это потенциально даже не di, мне это чувствует, что я просто передаю функцию, которая является объектом в качестве параметра.
  • Узел/JavaScript будет кэшировать необходимый модуль, поэтому повторно требовать его во всем моем проекте, просто ссылается на этот кэш.
  • Тестирование в маршрутизаторе было чрезвычайно легко. Я обнаружил, что создание поддельного объекта клиента приводит к большему контролю над моими тестами.
  • Функционально, не было бы никакой разницы, если требуется MQTT SAT внутри Router.js, а не главный файл моего приложения, но «единый маршрут в My App, кажется, проще понять.
  • Я не люблю видеть много «необходимых» модулей, разбросанных вокруг моего проекта, но в то же время отслеживает ввод функции и выходы, чтобы найти корня инъекции, может стать временем потреблением в большом проекте.
  • JavaScript не похож на другие языки, которые сильно зависят от ди. Модуль, требующий, эффективно, является еще одним способом привлечения объектов в объем необходимости.
  • Там, кажется, есть много библиотек Di JS, и на самом деле вы видите эти инъекции, происходящие в Express, Angular, Hapi etc все время.
  • Люди много комментируют об использовании завода.

Мысли и мнения?

Оригинал: “https://dev.to/imthedeveloper/the-nodejs-way—di-vs-module-require-8aj”