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