2012-02-23 13 views
0

いくつかのクラスで使用する必要があるキューがあります。グローバル変数に使用するシングルトンよりも良いアイデア

それはすべてのクラスのための同じキューですので、私は静的クラスとして静的クラスにキューを配置すると思った。 しかし、私はこれがとても良いOOPではないことを理解しています(シングルトンはデザインパターンの1つだと思っていましたが) このキューを実装するためのアイデアがほしいです すべてのクラスにユニークでアクセス可能である必要がありますすべてのクラスが同じキューを使用するためです。

+1

IoCコンテナを使用していますか? –

+0

Queue(またはConcurrentQueue)を含むsingletoneクラスを作成し、必要なすべての機能をクラスに公開します。 – Maxim

答えて

2

あなたのクラスはいくつかのコンテキストを共有し、このコンテキストには1つのキューが含まれているといえます。あなたのクラスはこの文脈に依存していると言えるでしょう。

シングルトンパターンがよくない理由は、グローバル(静的)コンテキストを共通コンテキストとして使用するためです。これは、2つの理由のために制限されています

  1. 明らかにあなたのクラスの依存関係を特定することは容易ではないので、(例えばユニットテスト環境など)、異なる環境下でそれらを設定することは容易ではありません。

  2. このコンテキストの2つのインスタンスを並べて実行することは全く不可能です。

したがって、簡単な解決策は、クラスのすべての依存関係をコンテキストクラス内に置き、すべてのクラスをこのクラスのインスタンスにリンクすることです。

さらに進んだもう一つの解決策は、依存性注入フレームワークを使用することです。

+0

私は、DIフレームワークは提案されたソリューションよりも複雑ではないと主張します。確かに。把握するのは新しい概念ですが、よりクリーンなコードが生成されます。 – jgauffin

1

これはプログラム内のすべてのクラスとレイヤーでグローバルに表示されるため、私はシングルトンにしません。キューにアクセスする必要がある部分には、キュー自体への参照を与えます。したがって、ソフトウェアのどの部分にアクセスできるかを明確に判断できます。

私は、野生の方法でソフトウェアのどの部分からでも使用されているので、「XyzManager」と呼ばれるシングルトンが多すぎるソフトウェアプロジェクトで非常に悪い経験をしていました。可能であれば、グローバル変数とシングルトンを避けてください。オブジェクトにアクセスする必要があるものへの参照を提供する方がよいでしょう。

関連する問題