С тех пор как выбирая проект по домашниму животным и копать через все мои старые проекты 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”