最近有一些同事和我正在讨论AngularJS服务是否应该有状态。我们提出了一些反对的论据,我想获得关于这个问题的更多想法和反馈。在我的搜索中,我发现了
this,但似乎没有提到任何明确的最佳实践。在没有客户端的世界中,服务不应该保持状态,但是我开始认为它可能是可接受的客户端,因为它是一个不同的问题。
服务理由:
>该服务不会被多个线程访问。每个浏览器都有自己的服务实例。
>允许服务仅保留状态,而不是将其存储在rootScope中。包囊
服务的原因不能保持状态:
>服务不再是幂等的。调用功能可能会改变状态,因此根据服务状态调用时可能会有不同的结果。
>我会认为这样会更容易测试。
在“for services holding state”部分中可能解决#2的一种方法是在rootScope上设置一个包含应用程序当前状态的appState对象。那么所有的国家都会聚集在一个地方,然后你只需把你需要的东西从你的服务中拉出来。我发现这个,想知道
在AngularJS,服务
are passed in via factory function.基本上它们是可以包含一些状态的对象(例如,用于缓存或存储执行其操作所需的数据)。
原文链接:https://www.f2er.com/angularjs/144286.html可以承担有/没有状态的两个缺点的一个好的解决方案是返回包含状态的对象的服务(可能实际上是函数)。
看看$ http服务:你可以得到这个服务调用的实例
var x = $http({url:'...'});
然后打来电话
var result = x.get() //actually `$http.get` is shortcut of this operation
与ngResource相同:使用服务,您可以获得可执行所需操作的某些状态的对象。
所以基本上我认为这是最好的选择:从一个点你可以通过移动可以被动作修改为独立对象的状态来避免“副作用”,而不是存储在服务本身中,但是可以在该对象中具有特定的状态存储自定义信息(如验证信息等)。