我说的是服务器端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
};
因此,在上面的设置中,我有所有在app.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开发人员)将其比作静态初始化程序。但上述哪一项被认为是更好的做法?感谢。
答案 0 :(得分:1)
第一种方法更好,因为它被正确解耦。
在第二种方法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);
一步加载模块,然后初始化它们有助于我澄清他们之间的关系。
希望有所帮助!