Запуск сценариев при использовании require ('some_module.js') - хорошая практика? - PullRequest
1 голос
/ 25 января 2012

Я говорю о серверной стороне js (с node.js и require.js). У меня есть три файла

//1) app.js - main entry point:
//=======================================================
var myservice = require('./myservice');

rt.register('someKey', require('./XYZhandler').handler);

//2) myservice.js:
//=======================================================
var handlers = {};

exports.register = function(key, handler) {
    handlers[key] = handler;
};

//3) and finally XYZhandler.js:
//=======================================================
exports.handler = function() {
    //...do something
};

Итак, в приведенной выше настройке у меня есть весь скрипт, который фактически выполняется явно в приложении.js

Альтернатива, которую я имел, была:

//1) app.js - main entry point:
//=======================================================
var myservice = require('./myservice'),
    rt = require('./XYZhandler');

//2) myservice.js: unchanged from above

//3)and finally XYZhandler.js:
//=======================================================
require('./myservice').register(function() {
    //...do that same thing
};

В этой последней настройке у меня есть скрипт в XYZhandler.js, который фактически выполняется при первом обращении к requirejs (обратите внимание, что XYZhandler.jsничего не экспортирует).Я (как разработчик Java) сравниваю это с статическими инициализаторами .Но что из вышеперечисленного считается лучшей практикой?Спасибо.

1 Ответ

1 голос
/ 26 января 2012

Первый подход лучше, потому что он правильно отделен.

Во втором подходе XYZhandler.js зависит от myservice.js. Если yourhandler.js или hishandler.js захотят register XYZhandler.js, их тоже нужно будет жестко закодировать. Довольно скоро все ваши модули будут зависеть друг от друга, и вы не сможете использовать их повторно. индивидуально, в этом и заключается весь смысл абстрагирования этих функций от модулей.

Это косметическая разница, но я бы, наверное, написал ваш первый пример так:

//1) app.js - main entry point:
//=======================================================
var myservice = require('./myservice');
var myhandler = require('./XYZhandler').handler;

rt.register('someKey', myhandler);

Загрузка модулей за один шаг, а затем их инициализация помогает мне прояснить их взаимосвязь.

Надеюсь, это поможет!

...