Inversion of Control / Aspect-Orientedの意味での.NETプロキシオブジェクトとは何ですか?

StackOverflow https://stackoverflow.com/questions/287479

質問

コントロールの反転/アスペクト指向の意味でのプロキシオブジェクトとは何ですか?

プロキシオブジェクトとは何か良い記事はありますか?
なぜ使用したいのですか?
そして、C#で1つ書く方法は?

役に立ちましたか?

解決

一般に、プロキシオブジェクトは、「実際のクラス」とまったく同じパブリックインターフェイスを公開するオブジェクト(クラスのインスタンス)です。ただし、そのメンバーに対して行われたすべての呼び出しを他の実際のクラスに転送するだけです。プロキシオブジェクトはさまざまな理由で使用されます...

目的の1つは、「ふりをする」ことです。クライアントコンポーネント(またはオブジェクト)が「信じる」ことができるように、実際のクラスになります。 「本物」と話しているオブジェクトですが、プロキシの内部では、他の処理(ロギング、トランザクションサポートなど)が同時に行われています...次に、プロキシは実際のオブジェクトと比較して非常に安価です。クライアントが使用していないときに実際のオブジェクトを保存する(オフにするか、他のクライアントが使用するプールに解放する)ために使用されることがよくあります...プロキシは「アライブ」のままです。クライアントは、実際のオブジェクトへの接続はまだあると考えますが、「コール」するたびにオブジェクト、実際にはプロキシを呼び出しています。プロキシは、呼び出しを処理するためだけに別の実際のオブジェクトを取得し、呼び出しが完了すると実際のオブジェクトを解放します。

Inversion of Control (IOC)について。これは、クラス内の依存オブジェクトが「注入」される一般的なパターン(依存性注入とも呼ばれます)を指します。クライアントコードからクラスのインスタンスに、インスタンスが使用する依存オブジェクトのバージョンを制御するために... IOCを使用して「プロキシ」を挿入できます。オブジェクトを実際のオブジェクトを使用していると考えるクラスに...フレーズ Inversion of Control は、このパターンを使用するときに、実際の実装を呼び出す決定がもはや行われないという事実を指します。呼び出しを行うクラスの制御下で、ただしそのクラスのクライアントに対して、この呼び出しに使用されるクラスに依存オブジェクトのインスタンスを注入する場合。

一般的にIOCという用語は、 IOCコンテナと呼ばれるもので使用されます。これは、それらのクラス(タイプ)に関する疎結合情報に基づいて依存クラスのインスタンスを作成するために特に設計されたクラス固定の依存関係以外のソースから取得します(ほとんどの場合、何らかの構成ファイルから取得します)。通常、IOCコンテナを使用する場合、アプリケーションの起動時にそのインスタンスを作成し、(設定データなどを読み取ることで)「登録」します。 IOCコンテナーが担当する各クラス(タイプ)、キー値。キーは、多くの場合、この登録のすべてのインスタンスが実装する必要のある抽象型またはインターフェイスです。次に、アプリケーションの通常の操作では、これらのタイプのいずれかのインスタンスを新しく作成する可能性があるため、抽象タイプ/インターフェースをキーとして使用して、IOCコンテナーを呼び出し、代わりにインスタンスを要求します。次に、IOCコンテナは、リフレクションまたはダイナミックロード(またはその他)を使用して、「登録」されたタイプのインスタンスを作成します。そのキーで。このように、構成データを変更するだけで、アプリケーションで使用される実際のタイプを制御し、ある環境または展開場所で別の環境または展開場所から変更することができます。

他のヒント

これに関する非常に優れたリソースは、古い「Gang of Four」です。デザインパターンの本。この本は、オブジェクト指向ソフトウェアを開発している人にとって非常に便利です。 私は個人的にNHibernateでの遅延読み込みにプロキシオブジェクトを使用しています。 IoCでのみインターフェイス型を解決するため、制御の反転でプロキシを使用しません。

チャールズ・ブレタナの説明はとても良いです。

プロキシとAoPの関係は想像できません。ここで誰か説明してもらえますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top