シングルトンを実装するためにIOCフレームワークに頼る方が良いですか?私は、ロックを二重にチェックしたり、静的なコンストラクタに頼ったりするのは良い習慣ではないと聞きましたが、これは本当ですか?シングルトン実装の質問
答えて
私の意見では、オブジェクトのライフタイムは、オブジェクトのタイプによって強制されないようにコンテキストによって決定されるべきです。常識では、オブジェクトの「シングルトン」を保証する方法は、悪い習慣ではなく、シングルトンパターンそのものの使用法です。
質問に答えるには:はい、IoCコンテナにオブジェクトの有効期間を処理させる必要があります。
おそらくthis answerが役に立ちます。これは、スレッドセーフでレイジーロードされたシングルトンの基本パターンを含んでいます。
二重チェックロックパターンを実装するのは簡単です。それは非常に簡潔であり、良い方法です。しかし、@Andrew Barberのように、不適切に実装することは苦しいことがあります。
if(_instance == null)
{
lock(_myLockObject)
{
if(_instance == null)
_instance = new Something();
}
}
return _instance;
私は '_instance'を正しいとするために' volatile 'と宣言しなければならないと思います。 –
私はこれについて不思議です。 MSDNのドキュメントでは、ロックを使用していないときにvolatileを使うべきだと言います。http://msdn.microsoft.com/en-us/library/x13ttww7(v=vs.71).aspx – Tejs
あなたはロックされていません。最初のチェックを実行します。メモリバリアなどはぞっとするほど複雑になる - 公開されるオブジェクト内のすべてのデータの前に参照が公開される可能性が懸念される。このようなことが私がそれを気に入らない理由です。 –
一般的なルールとしてのオブジェクトの有効期間は、常にIOCコンテナによって処理される必要があります。
マニュアルオブジェクトのライフタイム処理では、開発者のエラー、SRP違反、および大量のDRY違反が発生しやすくなります。
- 1. CLIシングルトンの質問
- 2. Trie実装の質問
- 3. インタビュー質問インターフェイスの実装
- 4. Qtシングルトンの実装
- 5. Objective-Cシングルトンの実装
- 6. Javaの設計/実装の質問
- 7. Hadoop MapReduce、Java実装の質問
- 8. 質問:バリアの実装およびシーケンスノード
- 9. カスタムSTLリスト実装の質問
- 10. Blackberryアプリケーション設計の質問 - シングルトン
- 11. データベース実装に関する質問?
- 12. RBAC実装に関する質問
- 13. Facebook Connect実装に関する質問
- 14. C++シングルトンの実装 - 静的に関する問題
- 15. アプリケーションサーバでのシングルトンの実装方法、シングルトンOK?
- 16. C++でのスレッドセーフなシングルトン実装
- 17. シングルトンの実装は、もはやスウィフト3
- 18. は、私は別の形質を実装形質を持つ形質実装
- 19. シェルスクリプトでシングルトンを実装する方法
- 20. シングルトン実装を使用したEjbキャッシュ
- 21. 自動プロパティ初期化子シングルトン実装
- 22. ウィキペディアでDijkstraのアルゴリズムの実装についての質問
- 23. SIMBLの実装についての質問
- 24. K&Rで見つけたC質問のバイナリツリーの実装
- 25. 実装私はデザインの質問を持っている
- 26. ルビーにハッシュを実装する際の質問
- 27. Java拡張/抽象化/実装の質問
- 28. Javaで基数ソートを実装する - かなりの質問
- 29. 基本プレフィックスツリーの実装に関する質問
- 30. ExpandableList配列リソースの実装に関する質問
私は全体的に「ダブルチェックロックがうまくいかない」memeに少し疲れています。 *適切に実装されたダブルチェックロックは、.NETでうまく動作します* ...あなたが正しい方向に向いているとは限りません。私は可能な限りシングルトンを避ける傾向があります。彼らはしばしば不必要です。 –
@Andrew:OPはそれがうまくいかないとは言わなかった。彼らはそれが悪い習慣であると聞きました。これは私が同意するものです。それはうまくいくのが面倒なことです、そして、ちょうどよく働く、より簡単なアプローチがほとんどあります。 (静的なコンストラクタに頼っても問題ありません。比較的小さな仕事しかしていないのであれば、あなたに気をつけてください) –
@Jon Skeet - あなたは正しいです。なぜ彼は彼が言ったことではないときに私は "動作しません"と読んでいるか分からない。 –