2014-09-13 69 views
1

我正在開發一個小型業餘愛好項目,在那裏我非常喜歡一些輸入和建議。node.js關於避免全局狀態的架構建議

這是我第一個「真正的」節點項目,我希望它能教會我很多關於node.js的開發。我是一名.NET開發人員,在職業上已經工作了大約15年。我也有過做Java的時期。我創建了一個小型node.js項目用作微服務。

但是,這個項目不再被歸類爲微服務;-)

該項目的目的是品嚐一些傳感器數據,並做一些報告。我在大學時玩過PLC的想法。我通過從PLC採樣並使用ZeroMQ發射數據。然後,我的node.js服務器監聽這個傳感器數據,並將其存儲在MongoDB中。

我在REST API中公開這些數據。 REST api還公開資源,如批處理和其他的東西,如身份驗證等。最重要的是,我有一個AngularJS應用程序,它創建了用戶界面。

真正讓我惱火的一件事是,我想全局分配正在運行的批次。我有一批批次,其中一批是正在運行的批次。我看到有兩種方法可以做到這一點,並且都說明了我在node.js世界中的新手地位。所有用戶都應該能夠看到正在運行的批次,並且我希望能夠從代碼中的任何位置輕鬆地進行分析。

1)在Mongo中的對象上設置一個標誌。這有許多問題。最明顯的就是表現。我每秒接收10次傳感器數據,而且我不想每次都詢問數據庫要保存的數據。

2)保存全局對象的信息。我真的不喜歡這個。我不喜歡我的代碼中的全局狀態。

做這樣的事情有什麼好的模式?我的問題是否有意義?

在此先感謝

+1

太寬泛。請回過頭來回答一些具體的問題,並且只標記你正在處理的體系結構。你可能會在[programmers.stackexchange.com/](http://programmers.stackexchange.com/)上找到更多的關於「踢出」設計概念的更多的愛,在那裏可以容忍更多的聊天。或者您也可以在這裏提出具體問題。 – 2014-09-13 08:09:42

+0

嗯,也許你是對的......最關心的是如何處理全局對象,當我想到它。將嘗試改進問題。 – 2014-09-22 11:30:03

回答

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'); 

app.set讓你保存數據在您的應用程序全局訪問和app.get讓你讀取先前存儲的數據。

+0

我對想要幫助的人很開放,但是這樣做**真的能回答這個問題嗎?還有更多的問題是您實際回答的幾個問題中的哪一個?很高興你想幫助或取得進展或任何其他。但有些事情你應該真正離開。 – 2014-09-13 08:36:23

+0

好的,謝謝。我只是想幫助提供我能理解的解決方案。我需要刪除這個答案,直到問題形成嗎? – matteospampani 2014-09-13 08:45:32

+0

嗯,這實際上只是我的看法,但我認爲這個「問題」要求的不僅僅是你的回答,而且一般來說過於寬泛。所以你可以認爲這是一個合理的答案,或者可能會由於它沒有真正回答所問的問題而冒失敗的風險。這是你的選擇,但通常有一個原因,你會發現問題沒有答案,特別是現有評論指出的原因。由你決定。 – 2014-09-13 08:54:26