最近我和一些同事正在讨论 AngularJS 服务是否应该有状态。我们提出了一些支持和反对它的论点,我想就这个主题获得更多的想法和反馈。在我的搜索中,我发现了这一点,但似乎没有提到任何明确的最佳实践。在无客户端的世界中,服务永远不应该保持状态,但我开始认为它可能是可接受的客户端,因为它是一个不同的问题。
服务保持状态的原因:
- 该服务不会被多个线程访问。每个浏览器都有自己的服务实例。
- 允许服务仅保存它关心的状态,而不是将其存储在 rootScope 中。封装
服务不保持状态的原因:
- 服务不再是幂等的。调用函数可能会改变状态,因此在根据服务的状态调用它时可能会产生不同的结果。
- 我认为总的来说这将更容易测试。
一种可能解决“用于保持状态的服务”部分中的#2 的方法是在包含应用程序当前状态的 rootScope 上设置一个 appState 对象。然后所有的状态将被收集在一个位置,然后你只需在你的服务中提取你需要的东西。我发现了这个并想知道