Skip to main content
 首页 » 编程设计

service之Angular 服务应该有状态吗

2025年01月19日29Free-Thinker

最近我和一些同事正在讨论 AngularJS 服务是否应该有状态。我们提出了一些支持和反对它的论据,我想获得关于这个主题的更多想法和反馈。在我的搜索中,我找到了 this但似乎没有提到任何明确的最佳实践。在无客户端的世界中,服务永远不应该保持状态,但我开始认为它可能是可以接受的客户端,因为它是一个不同的问题。

服务保持状态的原因:

  • 该服务不会被多个线程访问。每个浏览器都有自己的服务实例。
  • 允许服务只保存它关心的状态,而不是将它存储在 rootScope 中。封装

  • 服务不保持状态的原因:
  • 服务不再是幂等的。调用函数可能会改变状态,因此根据服务的状态调用它时可能会产生不同的结果。
  • 我认为总的来说这会更容易测试。

  • 可能解决“保持状态的服务”部分中#2 的一种方法是在包含应用程序当前状态的 rootScope 上设置一个 appState 对象。然后所有状态都将聚集在一个位置,然后您只需在您的服务中从中提取您需要的东西。我发现了这个并想知道

    请您参考如下方法:

    在 AngularJS 中,服务 are passed in via factory function .基本上它们是可以包含某种状态的对象(例如,用于缓存或存储执行其操作所需的数据)。

    一种可以同时兼顾有/没有状态的好解决方案是当服务(实际上可能是函数)返回包含状态的对象时。

    看看$http服务:您可以获得此服务调用的实例

    var x = $http({url:'...'}); 
    

    然后调用
    var result = x.get() //actually `$http.get` is shortcut of this operation 
    

    ngResource :使用服务,您可以获得具有某种状态的对象,可以执行所需的操作。

    所以基本上我认为这是最好的选择:从一个 Angular 来看,您可以通过将可以通过操作修改的状态移动到单独的对象中来避免“副作用”,而不是存储在服务本身中,但可以在该对象中具有特定状态以便能够存储自定义信息(如身份验证信息等)。