2014-09-13 2 views
1

Je travaille sur un petit projet de passe-temps, où j'aimerais vraiment avoir des idées et des conseils.node.js conseils architecturaux pour éviter l'état global

Ceci est mon premier "vrai" projet de nœud, et j'espère qu'il m'apprendra beaucoup sur le développement de node.js. Je suis un développeur .net par jour, et ai été pendant environ 15 ans professionnellement. J'ai aussi eu des périodes de Java. J'ai créé de petits projets node.js à utiliser comme micro services.

Mais ce projet ne peut plus être considéré comme un service de micro ;-)

Le but du projet est d'échantillonner des données de capteurs, et faire des rapports. Une idée que j'ai eue en jouant avec un PLC à l'université. Je fais cela en échantillonnant à partir d'un automate et en émettant les données en utilisant ZeroMQ. Mon serveur node.js écoute alors ces données de capteur et les stocke dans un MongoDB.

J'expose ces données dans une API REST. L'API REST expose également des ressources comme des lots et d'autres choses comme l'authentification etc. En plus de cela, j'ai une application AngularJS, qui crée définit l'interface utilisateur.

La seule chose qui m'ennuie vraiment, c'est que je veux globalement assigner ce qui est en cours d'exécution. J'ai une collection de lots, et l'un d'entre eux est en cours d'exécution. Il y a deux façons de le faire, et les deux illustrent mon statut de novice dans le monde node.js. Tous les utilisateurs devraient être en mesure de voir ce qui est en cours d'exécution, et je veux être en mesure de dire facilement à partir de n'importe où dans le code.

1) Définir un drapeau sur l'objet dans Mongo. Cela a un certain nombre de problèmes. L'évidence étant la performance. Je reçois des données de capteur 10 fois par seconde, et je ne veux pas demander à la base de données à chaque fois quel lot l'enregistrer sous.

2) Enregistrer les informations sur l'objet global. Je n'aime vraiment pas ça non plus. Je n'aime pas l'état global dans mon code.

Quel est un bon motif pour faire quelque chose comme ça? Ma question a-t-elle un sens?

Merci à l'avance

+1

Beaucoup trop large. S'il vous plaît revenir avec des questions spécifiques et s'il vous plaît seulement marquer au point de l'architecture que vous adressez. Honnêtement, vous pourriez trouver plus d'amour pour les concepts de design "coups de pied" sur [programmers.stackexchange.com/](http://programmers.stackexchange.com/) où un peu plus de discussion est tolérée. Ou vous pouvez également poser une question spécifique ici. –

+0

Hmmm peut-être que vous avez raison ... surtout intéressé à gérer les objets globaux quand j'y pense. Je vais essayer d'affiner la question. –

Répondre

0

Vous pouvez faire un simple appel REST à mis le lot actif et l'appeler à l'intérieur du lot quand est démarré et prêt à accepter les demandes. Par exemple:

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

Alors partout dans le code que vous pouvez utiliser:

app.get('active-batch'); 

Le app.set vous permet de sauvegarder des données globalement accessibles dans votre application et app.get vous permettre de lire les données précédemment stockées.

+0

Je suis très ouvert aux personnes qui veulent de l'aide, mais est-ce que ** ça ** répond vraiment à la question? Et plus au point "Quelles" parmi les nombreuses questions posées répondez-vous réellement? Je suis content que vous vouliez aider ou avancer ou quoi que ce soit. Mais certaines choses que vous devriez vraiment laisser seul. –

+0

Ok, merci. Je voulais juste aider à fournir une solution de ce que je pouvais comprendre.Ai-je besoin d'enlever cette réponse jusqu'à ce que la question soit bien formée? – matteospampani

+0

Eh bien c'est juste mon avis, mais je pense que la "question" demande plus que ce que vous avez répondu avec et est généralement trop large en le faisant. Donc, vous pouvez soit considérer cela comme une réponse raisonnable, soit risquer les downvotes qui peuvent résulter de ce qui ne répond pas vraiment à ce qui a été demandé. C'est vraiment votre choix, mais il y a généralement une raison pour laquelle vous trouvez des questions sans réponse, surtout lorsque les commentaires existants indiquent cette raison. Dépend de vous. –

Questions connexes