最近、何人かの同僚と私は、AngularJS サービスが状態を持つべきかどうかについて話し合っていました。私たちはそれに対する賛否両論をいくつか出しましたが、私はこの件について追加の考えやフィードバックを得たいと思っていました. 私の検索でこれを見つけましたが、言及されている明確なベストプラクティスはないようです。クライアント側のない世界では、サービスは決して状態を保持すべきではありませんが、別の問題であるため、クライアント側で許容できるのではないかと考え始めています。
サービスが状態を保持する理由:
- 複数のスレッドからサービスにアクセスすることはありません。各ブラウザには、サービスの独自のインスタンスがあります。
- rootScope に保存するのではなく、サービスが関心のある状態のみを保持できるようにします。カプセル化します
サービスが状態を保持しない理由:
- サービスは冪等ではなくなりました。呼び出し関数は状態を変更する可能性があるため、サービスの状態に基づいて呼び出したときに異なる結果になる可能性があります。
- 全体として、これはテストしやすいと思います。
「状態を保持するサービス用」セクションの #2 に対処する 1 つの方法は、アプリケーションの現在の状態を含む rootScope に appState オブジェクトを設定することです。次に、すべての状態が 1 つの場所に集められ、サービスで必要なものをそこから引き出すだけです。これを見つけて疑問に思った