Это не замедлит выполнение, но будет "вонючим". Его трудно обнаружить, и его будет трудно протестировать, если вы когда-нибудь решите, что вам это нужно.
Лучшим решением было бы прикрепить настройки к модулю и использовать require() для их импорта, где это необходимо.
Лучшим решением было бы просто передать объект настроек тем классам или модулям, которые в нем нуждаются. Либо напрямую, либо как часть некоего "глобального контекста".
Eg.
var global = {
settings: {
port: 8080
}
}
//...
global.api = new Api(global);
//...
function Api(global) {
var port = global.settings.port;
}
ОБНОВЛЕНИЕ: больше информации о том, почему исходный шаблон плохой:
1) Возможность обнаружения
Вы прикрепляете свои настройки к process.settings
и уходите в другой проект. Через год кто-то другой вступает во владение или вам нужно что-то обновить. Вы помните, что прикрепили свои настройки к process.nconf
? Или это было process.settings
?
Теперь представьте, что у вас есть 10 разных глобальных вещей, прикрепленных под разными именами в разных местах.
Это не так плохо, как присоединение непосредственно к глобальному контексту, но, безусловно, лучше четко видеть, откуда берется то, что вы используете (конструктор или модуль).
2) Тестирование
Вы решаете, что вам нужно протестировать свой модуль. Итак, теперь вам нужно настроить параметры для каждого теста, а не загружать их из файла или argv. Как ты это делаешь?
В случае глобальных шаблонов process.nconf
или require("settings")
вам нужно сделать что-то вроде этого:
function canOpenAPIOnTheConfiguredPort(done) {
var nconfSaveApiPort = process.nconf.api.port;
process.nconf.api.port = '1234';
var api = new Api();
test.assertEqual(api.port, '1234');
process.nconf.api.port = nconfSaveApiPort;
done();
}
По мере роста вашего приложения это быстро становится раздражающим (например, представьте, что вам нужно имитировать 10 вещей). Для сравнения, вот как вы это делаете, используя шаблон внедрения зависимостей (конструктор).
function canOpenAPIOnTheConfiguredPort(done) {
var api = new Api({
port: '1234'
});
test.assertEqual(api.port, '1234');
done();
}
person
panta82
schedule
19.04.2015