2016-11-29 9 views
0

Итак, я большой поклонник создания глобальных пространств имен в javascript. Например, если мое приложение называется Xyz я обычно есть объект XYZ, который я наполняться свойствами и вложенными объектами, для примера:NodeJS: Один объект со всеми требует, или «стандартные» пути в коде?

XYZ.Resources.ErrorMessage // = "An error while making request, please try again" 
XYZ.DAL.City // = { getAll: function() { ... }, getById: function(id) { .. } } 
XYZ.ViewModels.City // = { .... } 
XYZ.Models.City // = { .... } 

Я вроде поднял это во время работы над проектом с Нокаут, и Мне это очень нравится, потому что нет никаких диких ссылок на некоторые объекты, объявляемые в god-known-where. Все в одном месте.

Теперь. Это нормально для front-end, однако в настоящее время я разрабатываю базовый скелет для проекта, который начнется через месяц, и он будет использовать Node.

Я хотел бы, чтобы вместо всех требований в файлах .js у меня был бы один объект («XYZ»), который будет содержать все в одном месте. Например:

Вместо:

// route.js file 
var cityModel = require('./models/city'); 
var cityService = require('./services/city'); 

app.get('/city', function() { ...........}); 

Я хотел бы сделать объект:

XYZ.Models.City = require('./models/city'); 
XYZ.DAL.City = require('./services/city'); 

И использовать его как:

// route.js file 
var cityModel = XYZ.Models.City; 
var cityService = XYZ.DAL.City; 

app.get('/city', function() { ...........});  

Я действительно не имеют доходы но все необходимые требования кэшируются и обслуживаются, если они кэшированы, из памяти, поэтому повторное требование в нескольких файлах не является проблемой.

Это нормально, или я должен придерживаться стандартной процедуры ссылок на зависимости?

Редактировать: Я забыл сказать, будет ли этот шаблон фабричного блока блокировать основной поток или задерживать запуск сервера? Мне просто нужно знать, каковы недостатки ... Я не против необходимости в коде, но я просто переименовал одну папку и должен был пройти через пять файлов, чтобы изменить пути ... Что действительно неудобно.

ответ

0

Я думаю, что это плохая идея, потому что вы собираетесь обслуживать тонну модулей каждый раз, и вам могут не понадобиться их всегда. Ваш объект с именами станет довольно чудовищным. require сначала проверит кеш модуля, поэтому я бы использовал стандартные требования для каждого запроса/скрипта, который вам нужен на сервере.

+0

Хм. Интересно. Так что если в server.js или что-то, что он назвал, я называю «globals.XYZ = require (« my-monstrous-object »)», он будет повторяться несколько раз? – skafander

+0

Что значит «несколько экземпляров»? Он назначит 'my-monstrous-object'модуль' globals.XYZ'. –

+0

О, так что вы подразумеваете под «сервером от модулей каждый раз»? – skafander