2009-08-04 11 views
3

どのようなサイズのアプリケーションでも、Context.Currentパターンを使用するとどのような欠点がありますか? (つまり、 "Current"は、初めて使用されたときにインスタンス化する "Context"クラスの共有/静的なプロパティです)Context.Currentパターンの欠点?

共有/静的クラス/メソッドだけでこのパターンを使用する利点はありますか?

私はそれがさまざまな言語で適用できるとは思いますが、.NETのコンテキストで尋ねています。

答えて

5

これは、通常、スレッドローカルストレージを表す一種のシングルトンパターンです。 .NETの世界でよく知られている例は、HttpContextです。

最も一般的な問題は、のテスト容易性です。確かに不可能ではありませんが、パターンはTDDと互換性のない使用モデルを奨励しますので、それを使用するには特別な注意が必要です。 ASP.NET MVCでは、オブジェクトにアクセスするためにシングルトンストレージに頼るのではなく、コンテクストオブジェクト自体が入力パラメータとして各レイヤーに渡される、非常に改善されたパターンがあります。

これを見る別の方法は、おそらくは依存性注入のような他の、おそらくはるかに有用なOOパターンではうまくいきません。ほとんどの人は、あなたの現在の状態に便利なシングルトンのショートカットを持つよりも、DIを使用できることから、より多くのマイルを獲得できると主張します。

シングルトン状態またはグローバル状態の場合と同様に、マルチスレッドと並行処理で一連の問題が発生します。これらを緩和するための確立されたパターンがありますが、明らかに "緩和"を必要とするパターンを使用すると、そうでなければ問題ではない多くのリスクにさらされます。

時にはシングルトンのための適切な場所がありますが、それらはごくわずかです。シングルトンに状態を格納するという決定は、経験豊富なチームによって非常に慎重に行われなければなりません。経験の浅いチームは、彼らが安全な側にいるのを避けるべきです。