2017-07-03 9 views
2

私はAndroidアプリケーションをビルドしています。このアプリケーションには、ユーザーのプロファイル情報を保持するためのクラスUserがあります。ユーザーが作成されると、SharedPreferencesファイルに保存されるので、次回にアプリケーションを起動したときに最後に作成したユーザーを読み込むことができます。私はまた、新しく作成されたユーザーのオブジェクトを保持するSingletonクラスを持っているので、他のクラスでも使用できます。私は、SharedPreferencesファイルを読んで、フラグメントを変更するたびにユーザーが必要となるのを避けるためにこれを行いました。私の質問は:Singletonは、アプリケーション全体のメモリに変数を保持するための適切な方法を使用していますか?それを目的としていたのですか、それともオブジェクト指向プログラミングの原則を維持する別の方法がありますか?アクセサーメソッドではなく、アクティビティーで変数を作成する方が良いでしょうか?SingletonはAndroidアプリケーションのメモリにデータを保存する最良の方法ですか?

答えて

0

はい、そうするのが良い方法です。そして、シングルトンオブジェクトのデータを(あたかもあなたが言及したように)共有のプリファレンスから毎回アクセスするほうがいいです。私たちは、アプリケーションでセッションの目的のためにユーザーシングルトンを意味します。つまり、アプリケーションが変数データを実行している間はアクセス可能です。アクティビティレベルで変数を作成できますが、それは非常に悪いアプローチです。要するに、あなたの目的に使用しているアプローチが最善の方法です。

0

私は以下を使用します: インタフェースCurrentUser。 CurrentUserには、ユーザーを取得および更新するメソッドがあります。ユーザーは、DB、環境設定または混合して保存することができます。 必要に応じてDaggerを使用してCurrentUserを注入します。 Daggerはシングルトンの品質を保証しないため、CurrentUserの実装自体はシングルトンにする必要があります。 CurrentUserがRxJavaストリームやLiveDataのようなものを持っていて、オブザーバーを最新の状態に保つことができれば、ボーナスポイントになります。

シングルトンの代わりに、保持されたフラグメントでフラグメントホルダーパターンを実装することもできますが、状況によってはシングルトンが優れているようです。インターフェイスと注入を使用してテスト容易性を損なわないようにし、コンポーネントを分離した状態に保つようにしてください。

+0

私が理解しているところでは、情報はシングルトンクラスに保存されていますが、コードはこの方法でよりクリーンでモジュラーですか? – D3bian0s

+0

はい、コードが優れています。あなたのクライアントによってシングルトンのインスタンスを取得することは悪い習慣ですが、シングルトンのライフタイムには問題はありません。 シングルトンはステートフルなのでテストするのが難しいかもしれませんので、コンストラクタをpackage-privateにし、それぞれのテストでシングルトンの新しいインスタンスを使用することを検討してください。 – charlag

関連する問題