Я хотел бы попытаться построить более крупное, более модульное приложение node.js, чем мои предыдущие попытки. Я застрял на шаблонах дизайна, поскольку кажется, что существует слишком много способов сделать одно и то же, и я теряюсь в блоге FUD о том, как это сделать. Я работал главным образом в рамках MVC, где передается глобальная переменная приложения, и мне интересно, полезна ли эта концепция в узле. Например:Node.js design pattern
./index.js
var app = {};
var api = require('api'); // Api server module
var db = require('db'); // db client
var dbh = db.connect(); // connect to db
app['dbh'] = dbh;
api.start(app);
./api.js
var API = exports;
API.start = function(app, callback) {
// do api server stuff
app['dbh'].execute(... function (err, results){
console.log('foo');
});
}
Является ли эта идея присвоения всех функций, данные конфигураций и переменных приложения объекта разумный подход?
Узел имеет модули в качестве фундаментальной части, как это работает так, как правило, вы бы просто положить набор методов в одном модуле, а затем использовать в качестве контейнера для естественного объекта для них. Я не уверен, какую проблему вы пытаетесь решить, создав дополнительные контейнеры вне самих модулей. Вы также можете создавать модули, которые ничего не делают, кроме загрузки других модулей и объединения их интерфейсов в более крупный интерфейс модуля. Если вы ищете что-то сверх того, что предлагает модуль, я бы предложил вам описать ваши потребности, которые не обслуживаются модулями. – jfriend00
IMO, интерфейсы модулей должны быть сконструированы таким образом, чтобы их можно было напрямую потреблять в качестве их интерфейса модуля, поэтому вам обычно не нужно переупаковывать их в новый интерфейс в каком-либо другом объекте. – jfriend00
@ jfriend00 Я только пытаюсь сделать код, потребляющий модули более простым. Разница между передачей всех переменных модуля в функцию против передачи одной переменной приложения. Это позволит мне устанавливать и удалять функции в приложении по своему усмотрению и изменять код только в функциях, использующих переменную приложения, вместо рефакторинга самой функции. –