はシングルトンの問題のカップルがあります。私はそれらを以下に概説し、いくつかの代替解決策を提案する。私は彼らが自分の用途を持っていると信じているように、 "シングルトンを使わないでください。しかし、これらの用途はまれです。
スレッドセーフです。グローバル静的シングルトンを使用している場合は、何かにいつでもアクセスできるため、スレッドセーフでなければなりません。これは追加のオーバーヘッドです。
ユニットテストはシングルトンでは難しくなります。
グローバル変数を安価に置き換えることができます(つまり、方法やその他の面白いことがあるかもしれませんが、シングルトンは終わりです)。
を参照してください、それはシングルトンのは、それ自体は「恐ろしい憎むべきもの」であることではないのですが、それは最初のデザインパターンだと、多くの新しいプログラマがに対処するために取得し、その落とし穴(ただ、上のいくつかのギアをスティックの利便がが難読化それをスチームパンクと呼ぶ)。
あなたのケースでは、モデルを参照していますが、これらは常に自然にデータを反映するため、「インスタンス」です。おそらく、あなたはこれらのインスタンスを取得するコストが心配です。私を信じて、それらは無視できるものでなければなりません(明らかにデータアクセス設計に至るまで)。
代替手段はありますか?モデルを必要とする場所にモデルを渡します。これにより単体テストがより簡単になり、そのモデルの基本を一気に交換することができます。これはまた、インタフェースを見たいと思うかもしれないことを意味します - これは契約を意味します。これらのインターフェースを実装する具体的なオブジェクトを作成することができます。コードは簡単にユニットテスト可能で変更可能です。
シングルトンの世界では、そのシングルトンを1回変更すれば、コードベースのすべてが根本的に破壊される可能性があります。良いことではありません。
"MODELS"を静的にするいいえ、実際はありません。少しでも。それは[RegExでHTMLを解析する](http://stackoverflow.com/a/1732454/643085) –
Hehよりもさらに悪いことです。私には抵抗できませんでした。 – sircodesalot
DIを静的にするのではなく、ContainerControlledLifetimeManagerでコンテナに登録します。静的であれば、スレッドの安全性に関する問題が増えます。 –