Context design patternについて読んだことがあります。ここで私は、テキストからわかるものです:コンテキストデザインパターンについて説明できますか?
あなたはあなたにすべての変数を送信する必要がないように、あなたは、それを必要とする誰にそれを周りに渡すすべての変数
を含むマップを持っていますメソッドパラメータ
私はそれを取得しましたか?
Context design patternについて読んだことがあります。ここで私は、テキストからわかるものです:コンテキストデザインパターンについて説明できますか?
あなたはあなたにすべての変数を送信する必要がないように、あなたは、それを必要とする誰にそれを周りに渡すすべての変数
を含むマップを持っていますメソッドパラメータ
私はそれを取得しましたか?
コンテキストオブジェクトは、共有データおよび機能へのアクセスを提供します。あなたは現実世界の例をしたい場合は
The ACCU provides a more detailed description.
:それはのためのエレガントかつ柔軟な代替することができ
Javaのコンテキストパターンのうち、を確認してください。
コンテキストパターンを使用する場合は、dependency graphを気にする必要があります。 (これがKpatajnKoldがそれを反パターンと呼ぶ理由です)。
不要な依存関係を制限するには、異なる目的で異なるコンテキストを使用します。コンテキストを可能な限りシンプルに保ち、構成や継承を使用して必要に応じて複雑性を追加します。
私はそれを取得しましたか?
申し訳ありませんが、かなりです。
Context Objectの目的は、暗黙のうちに強いタイピングとカプセル化を回避する手段として、多くのパラメータを暗黙的にメソッドに渡すことであるではありません。です。目標は、プロトコルおよびプレゼンテーション技術とは無関係に、一般的な、しかし管理された方法でスコープされたデータを格納することです。スコープ内に格納されたデータは本質的に共有され、構造化され、本質的にメソッドに渡される一回限りのパラメータとは異なります。
コンテキストオブジェクトパターンは、Core J2EE Patterns 2nd Edに初めて導入されました。 「コンテキスト」部分は、オブジェクトがの範囲内のデータを保持するという事実を指す。
(例えば、application/session/request/conversation/flash
)。
HttpSession
およびHttpRequest
のようなプロトコル/プレゼンテーションテクノロジー固有のクラスからアプリケーションデータとロジックを可能な限り切り離すことが目的です。コンテキスト・オブジェクトの下
パターンの実装
、アプリケーション/セッション/リクエスト/その他の範囲を対象としたデータは、他のServletContext
/HttpSession
/HttpRequest
/プロトコル固有のクラスに直接置かれていません。代わりに、データはPOJOラッパークラスに格納され、ServletRequest
/HttpSession
/HttpRequest
/その他に格納されます。
コンテキストオブジェクトは、マップにデータを格納しますが、プログラムに関連する任意の構造体/形式のデータを格納する必要はありません。
アプリケーションは、スコープごとに1つのContext Objectクラスを使用することができます。また、クラスの拡張を避け、懸念の分離を促進するために、データを規則的に分割する複数のクラスが使用できます。
コンテキストオブジェクトは、最前面のプレゼンテーションクラス(ビュー、フロントコントローラ、ディスパッチャ)によって使用されます。これらのプレゼンテーションクライアントオブジェクトは、スコープ付きコンテキストデータを格納するためにcontextObject.getを呼び出し、スコープ付きコンテキストデータを格納するためにcontextObject.putを呼び出します。
ビジネス/統合ロジックには渡されません。それは厳しいタイピングを迂回して多数のパラメータをビジネスオブジェクトに渡す手段としては使用されません。ビジネス・インテグレーション層には、ビジネス・デリゲート、アプリケーション・サービス&、または特定の厳密な型指定パラメータを使用するセッション・ファサードがあります。コア:そのようServletContext
やHttpRequest
パターンは
コメント
: 私はあなたがそれを得たと思います。 しかし、私はそれが回避されるべきより多くの反パターンであるとも思う。なぜhereを参照してください。
ご意見は、誤って実装されたContext Objectのバージョンを参照してください。コンテキストオブジェクト自体は反パターンではありません。
Win32APIを思い出させます。ここでは、単一のメソッド呼び出しのために巨大なオブジェクトを作成し、これをパラメータとして渡しました。このIMOは反パターンでした。プロパティの多くは、単一のメソッドコール、すなわちウィンドウのウィンドウサイズと位置にのみ関連していました。コンテキストオブジェクトのプロパティはあまり短命であってはいけません。また、現在のスコープ全体で共通している必要があります。ルート/親ウィンドウなどの一部のプロパティは、有効なコンテキスト情報です。うまくいけば、人々がパターンを誤用しているかどうかを考え、評価するのに役立ちます。それは確かに正確な科学ではありません。 – AaronLS
inializeにコンテキストを使用するクラス。このコードを検討してください
public class BuildTagHandler extends TagHandler {
public BuildTagHandler(ServiceContext context) { // constructor
this.tagDAO = context.getTagDAO();
this.buildDAO = context.getBuildDAO();
}
あなたのクラスを構築するためにコンテキストを使用します。 文脈ファイルでは、これらのDAOオブジェクトをたくさん持っている代わりに、実装はしません。
これはファサードパターンと解釈することも、巨大なインターフェイスがすべてのエントリをカバーすることもできます。
も参照してください:[コンテキストオブジェクトデザインパターンとは何ですか?](http://stackoverflow.com/questions/771983/what-is-context-object-design-pattern) – emallove
@ glen-best answerは(63対7票)。 –