最近有些同事和我正在討論AngularJS服務是否應該有狀態。我們提出了一些贊成和反對的觀點,並且希望得到關於這個問題的更多想法和反饋。在我的搜索中,我發現this,但似乎沒有提到任何明確的最佳做法。在沒有客戶端的世界中,服務不應該保持狀態,但我開始認爲它可能是可以接受的客戶端,因爲它有一個不同的問題。Angular服務應該有狀態嗎?
理由保持狀態服務:
- 的服務是不會被多個線程訪問。每個瀏覽器都有自己的服務實例。
- 允許該服務保持僅關注的狀態,而不是將其存儲在rootScope中。封裝不保持狀態
原因服務:
- 服務不再是冪等。調用函數可能會改變狀態,因此在根據服務狀態調用它時可能會有不同的結果。
- 我認爲總的來說這樣會更容易測試。
可能會解決「for services holding state」部分中#2的一種方法是在rootScope上設置一個appState對象,該對象包含應用程序的當前狀態。然後,所有的州都會集中在一個地方,然後在您的服務中將您需要的東西拉出來。我發現這一點,並想知道
關於$ http和$資源的好處。另外,我喜歡你關於只存儲不會被服務調用的函數修改的狀態的想法(除了可能在初始化服務時)。 – testing123