2011-01-19 10 views

答えて

2

グローバル変数とシングルトンは、テスト可能性の観点から似ているため、別々に処理する必要はありません。良好なオブジェクト指向設計は、結果として生じるシステムを作成するために一緒に適合するレゴのレンガのようにすべきである。グローバルの主な問題は、孤立を失うことです。グローバルまたはシングルトンを使用して共同作業者にアクセスする場合、クラスは別のレンガではなく、別のプロジェクトで単独で使用または再利用することができます。グローバルに依存するクラスを取るときには、それを使って残りのデザインをドラッグします。テストでは、クラスからその共同作業者への接続を切断するために余分な手順を講じなければならないので、問題が発生します。 (私のブログにはmore about thisと書いてあります)

問題の良い解決策は、外部からのクラス依存関係を提供することです。すべての孤立したレンガを取得し、それらをアプリケーションを構成するオブジェクトグラフに接続する、ある種のメカニズム(多分簡単なクラス)を導入するだけです。これは、Inversion of ControlとDependency Injectionのすべてです。

1

さまざまなグローバル状態はありません。何かがグローバルな状態かそうでないかのどちらかです。シングルトンのアンチパターンは、さまざまな初期化の頭痛を取り除くだけですが、グローバル変数とまったく同じです。

グローバル状態を回避するにはどうすればよいですか?地方の州をいくつか作り、そこへの参照やポインタを渡してください。膨大な大多数の出現では、グローバルな状態は不必要です。 ですが、ヒープのように必要なグローバル状態のインスタンスがいくつかありますが、非常にまれです。質問する必要がある場合は、正しいタイミングを知るのに十分なことはほとんどありません。

関連する問題