2014-09-13 2 views
1

Я работаю над небольшим проектом по хобби, где мне бы очень понравился вход и совет.node.js архитектурный совет по предотвращению глобального состояния

Это мой первый проект «настоящего» узла, и я надеюсь, что он научит меня многому о развитии node.js. Я являюсь разработчиком .net днем ​​и профессионально занимаюсь в течение 15 лет. У меня также были периоды работы с Java. Я создал небольшие проекты node.js, которые будут использоваться в качестве микросервисов.

Но этот проект не может быть больше не классифицируются как микро сервис ;-)

Целью проекта является образец некоторых данных датчика, и сделать некоторые отчеты. Идея, которую я получил от игры в ПЛК в университете. Я делаю это путем выборки из ПЛК и испускания данных с помощью ZeroMQ. Затем мой node.js-сервер прослушивает данные этого сенсора и сохраняет его в MongoDB.

Я раскрываю эти данные в REST api. REST api также предоставляет ресурсы, такие как партии и другие вещи, такие как аутентификация и т. Д. Кроме того, у меня есть приложение AngularJS, которое создает пользовательский интерфейс.

Единственное, что меня действительно раздражает, - это то, что я хочу глобально назначить, какой пакет работает. У меня есть набор партий, и один из них работает. Есть два способа, которые я вижу для этого, и оба иллюстрируют мой статус новичка в мире node.js. Все пользователи должны быть в состоянии видеть, что пакет работает, и я хочу, чтобы иметь возможность легко сказать из любого места кода.

1) Установите флаг на объект в Монго. У этого есть ряд проблем. Очевидным является производительность. Я получаю данные датчиков 10 раз в секунду, и я не хочу каждый раз запрашивать базу данных, какую часть ее сохранить.

2) Сохраните информацию о глобальном объекте. Мне тоже это не нравится. Мне не нравится глобальное состояние в моем коде.

Что такое хороший шаблон для выполнения чего-то подобного? Имеет ли смысл мой вопрос?

Заранее спасибо

+1

Путь слишком широкий. Пожалуйста, вернитесь с конкретными вопросами и, пожалуйста, отметьте только те точки, в которых вы обращаетесь. Вы, честно говоря, можете больше любить концепцию дизайна «на ногах» на [programers.stackexchange.com/](http://programmers.stackexchange.com/), где допускается более частый разговор. Или вы можете задать здесь конкретный вопрос. –

+0

Хммм, возможно, вы правы ... в основном интересуется, как обращаться с глобальными объектами, когда я думаю об этом. Попробуем уточнить вопрос. –

ответ

0

Вы можете сделать простой REST вызов установить активной партии и назвать его внутри партии при запуске и готов принимать запросы. Например:

app.put('/active-batch', function(req, res, next){ 
    // Make sure req.body is defined 
    app.set('active-batch', req.body); 
    res.end(); 
}); 

Тогда всюду в коде вы можете использовать:

app.get('active-batch'); 

The app.set позволяют сохранять данные в глобальном масштабе доступны в приложении и app.get позволяют просматривать ранее сохраненные данные.

+0

Я очень открыт для людей, желающих помочь, но делает это ** действительно ** ответить на вопрос? И еще до того, что «Который» из нескольких заданных вопросов вы на самом деле отвечаете? Рад, что вы хотите помочь или уйти вперед или что-то еще. Но некоторые вещи, которые вы должны просто оставить в покое. –

+0

Хорошо, спасибо. Я просто хотел помочь найти решение того, что я мог понять.Нужно ли мне удалять этот ответ, пока вопрос не будет сформирован? – matteospampani

+0

Ну, это действительно мое мнение, но я думаю, что «вопрос» требует больше, чем вы ответили, и, как правило, слишком широка в этом. Таким образом, вы можете либо считать это разумным ответом, либо рисковать downvotes, которые могут возникнуть в результате того, что он не отвечает на заданное. Это ваш выбор на самом деле, но обычно есть причина, по которой вы находите вопросы без ответа, особенно там, где существующие комментарии указывают на эту причину. Вам решать. –

Смежные вопросы