.NETにおいてAOPを実現する透過プロキシ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>AOP]]
* 目次 [#b8f54ee6]
#contents
*概要 [#zfca130b]
.NET Frameworkで[[AOP]]を実現するための手法の1つである~
「透過プロキシ(RealProxyクラス)」の概要、使用方法、~
そして、サンプル コードについて説明する。
ココでは、.NET Frameworkで[[AOP]]を実現するための~
手法の1つである透過プロキシにフォーカスしてこれを説明す...
*透過プロキシ [#ad4aba32]
**透過プロキシの概要 [#gbc46098]
透過プロキシとは、種々のリモート処理 基盤技術を使用して~
境界を越えオブジェクトを転送するためのプロキシである。
-ココでは、AOPを実現するための手法の1つとして透過プロキ...
-また、RealProxyクラスは透過プロキシを開発するための開発...
捕捉:
-転送されるオブジェクトは、MarshalByRefObject クラスを継...
--MSDN > .NET Frameworkクラス ライブラリ > MarshalByRefOb...
http://msdn.microsoft.com/ja-jp/library/system.marshalbyr...
>MarshalByRefObject の「Marshal」は、一般的には「鉄道 操...
-RealProxyクラスはabstract基本クラスであり、透過プロキシ...
--MSDN > .NET Frameworkクラス ライブラリ > RealProxyクラス~
http://msdn.microsoft.com/ja-jp/library/system.runtime.re...
**透過プロキシの基本的な動作 [#y244fdd9]
以下、透過プロキシの基本的な動作を説明する。
***(1) [#pa40385b]
-クライアントは、使用したいオブジェクト(以降、オブジェク...
-透過プロキシは、リモート処理 基盤技術を使用してオブジェ...
--オブジェクトを生成する方法として、下記の方法が考えられ...
---コンストラクタから、オブジェクト・インスタンスを直接受...
---コンストラクタから、クラス情報を受け取り、~
これを使用してオブジェクト・インスタンスを生成する方法
---コンストラクタから、リテラルを受け取り、定義情報から対...
これを使用してオブジェクト・インスタンスを生成する方法
-クライアントはオブジェクトAの参照の変わりに透過プロキシ...
この透過プロキシの参照は、オブジェクトAの型に設定すること...
クライアントは、あたかもオブジェクトAを直接操作できるかの...
#ref(BasicOperationOfRealProxy1.png,left,nowrap,透過プロ...
***(2) [#j139262c]
-透過プロキシの参照は、オブジェクトAの型に設定されている...
この型を使用してオブジェクトAに対する呼び出しが可能である。
-このオブジェクトAのクラス型を使用したオブジェクトAへの呼...
透過プロキシを使用して呼び出しているので、始めに透過プロ...
Invoke メソッドにより呼び出しがフックされる。
--透過プロキシでは、継承したRealProxyのInvokeメソッドをオ...
#ref(BasicOperationOfRealProxy2.png,left,nowrap,透過プロ...
***(3) [#w7016341]
-透過プロキシは、Invokeメソッド内でリモート処理 基盤技術...
--透過プロキシのポイントは、透過プロキシのInvokeメソッド...
呼び出しメソッドのメソッド シグネチャの情報が引数として与...
---メソッド シグネチャとは、一般的に、~
「メソッド名」、「パラメタ数と順序、パラメタの型」、「戻...
-透過プロキシのInvokeメソッドから使用したいオブジェクトに...
最終的にレイトバインド 技術を使用することになる。
--.NETでは、System.Reflection名前空間のクラスライブラリを...
-レイトバインドを使用する場合は、メソッド シグネチャを固...
--言語によっても異なるが、C++、C#のような「強い静的型付け...
実行に任意のオブジェクトに対して任意のメソッド呼び出しを...
---C++では、これを仮想関数呼び出しやCOMで実現する。
---C#では、System.Reflection名前空間のクラスライブラリを...
---これに対し、VBではobject型に任意のメソッド呼び出しを記...
-透過プロキシのInvokeメソッドには、~
呼び出しメソッドのメソッド シグネチャの情報が引数として与...
これを使用して、どのようなメソッド呼び出しも転送すること...
#ref(BasicOperationOfRealProxy3.png,left,nowrap,透過プロ...
**透過プロキシでAOPを実現 [#ef5ee71f]
透過プロキシの働きについては、[[前項>#y244fdd9]]で説明し...
-ここまでの説明で明らかであるが、透過プロキシを使用したAO...
透過プロキシのInvoke メソッドにアスペクトを実装するだけの...
--ここでは、透過プロキシの本来の~
「リモート処理 基盤技術を使用して境界を越えオブジェクトを...
役割は不要であるため、その部分の実装も不要である。
-また、様々な仕掛け(定義情報など)を用いることで、~
以下の様な機能を追加することも可能である。
--以下からウィービングされるアスペクトのパターンを可変に...
---コンストラクタに指定されたリテラル
---メソッドに指定されたアノテーション(クラス / メソッド...
--アスペクトの実装位置を、透過プロキシ上から他のモジュー...
---コンストラクタに指定されたリテラル
---メソッドに指定されたアノテーション(クラス / メソッド...
しかし、ココでは、これらの応用的な利用方法までは説明しな...
*動作確認用のサンプル プログラム [#lbff0d38]
-透過プロキシを使用したAOPの動作確認用~
サンプル プログラムを用いて、AOPの実装方法を説明する。
--サンプル プログラムはConsoleアプリケーションで作成され...
--プロジェクトの構成は次のようになっている。
-サンプル プログラム~
>&ref(RealProxy.zip);
-クラス(モジュール)一覧
|項番|クラス(モジュール)|説明|h
|1|TG.cs|ターゲット クラス(ココで言うオブジェクトA|
|2|PR1.cs|透過プロキシ1(オブジェクトAのインスタンスを...
|3|PR2.cs|透過プロキシ2(オブジェクトAのクラス型情報を...
|4|MyInt.cs|参照型を引数に使用した場合の動作検証に用いる...
|5|Program.cs|各種テスト ケースを実行するエントリポイン...
**ターゲット クラス [#k301427f]
ターゲット クラスは、本書で説明した「オブジェクトA」、~
すなわち、クライアントが使用したいオブジェクトのことであ...
実装のポイントは、MarshalByRefObjectクラスを継承すること...
サンプル プログラムでは、様々なシグネチャのメソッドの呼び...
様々なシグネチャのメソッドをターゲット クラスに実装してあ...
**透過プロキシ [#r556d2a8]
-実装のポイントは、RealProxyクラスを継承することである。
-サンプル プログラムには、アスペクトは実装していないので、~
任意のアスペクトのパターンを、ここでウィービングするよう...
***コンストラクタ [#kc1ae4e5]
また、透過プロキシ1、2で、コンストラクタの実装が若干異...
異なる点は、ターゲット クラスのオブジェクト インスタンス...
-透過プロキシ1~
コンストラクタから、ターゲット クラスのオブジェクト イン...
-透過プロキシ2~
コンストラクタからクラス情報を受け取り、~
これを使用してターゲット クラスのオブジェクト インスタン...
***Invokeメソッド [#cf5bea3e]
透過プロキシ1、2ともInvokeメソッドの実装は同じである。
----
Tags: [[:プログラミング]], [[:.NET開発]]
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>AOP]]
* 目次 [#b8f54ee6]
#contents
*概要 [#zfca130b]
.NET Frameworkで[[AOP]]を実現するための手法の1つである~
「透過プロキシ(RealProxyクラス)」の概要、使用方法、~
そして、サンプル コードについて説明する。
ココでは、.NET Frameworkで[[AOP]]を実現するための~
手法の1つである透過プロキシにフォーカスしてこれを説明す...
*透過プロキシ [#ad4aba32]
**透過プロキシの概要 [#gbc46098]
透過プロキシとは、種々のリモート処理 基盤技術を使用して~
境界を越えオブジェクトを転送するためのプロキシである。
-ココでは、AOPを実現するための手法の1つとして透過プロキ...
-また、RealProxyクラスは透過プロキシを開発するための開発...
捕捉:
-転送されるオブジェクトは、MarshalByRefObject クラスを継...
--MSDN > .NET Frameworkクラス ライブラリ > MarshalByRefOb...
http://msdn.microsoft.com/ja-jp/library/system.marshalbyr...
>MarshalByRefObject の「Marshal」は、一般的には「鉄道 操...
-RealProxyクラスはabstract基本クラスであり、透過プロキシ...
--MSDN > .NET Frameworkクラス ライブラリ > RealProxyクラス~
http://msdn.microsoft.com/ja-jp/library/system.runtime.re...
**透過プロキシの基本的な動作 [#y244fdd9]
以下、透過プロキシの基本的な動作を説明する。
***(1) [#pa40385b]
-クライアントは、使用したいオブジェクト(以降、オブジェク...
-透過プロキシは、リモート処理 基盤技術を使用してオブジェ...
--オブジェクトを生成する方法として、下記の方法が考えられ...
---コンストラクタから、オブジェクト・インスタンスを直接受...
---コンストラクタから、クラス情報を受け取り、~
これを使用してオブジェクト・インスタンスを生成する方法
---コンストラクタから、リテラルを受け取り、定義情報から対...
これを使用してオブジェクト・インスタンスを生成する方法
-クライアントはオブジェクトAの参照の変わりに透過プロキシ...
この透過プロキシの参照は、オブジェクトAの型に設定すること...
クライアントは、あたかもオブジェクトAを直接操作できるかの...
#ref(BasicOperationOfRealProxy1.png,left,nowrap,透過プロ...
***(2) [#j139262c]
-透過プロキシの参照は、オブジェクトAの型に設定されている...
この型を使用してオブジェクトAに対する呼び出しが可能である。
-このオブジェクトAのクラス型を使用したオブジェクトAへの呼...
透過プロキシを使用して呼び出しているので、始めに透過プロ...
Invoke メソッドにより呼び出しがフックされる。
--透過プロキシでは、継承したRealProxyのInvokeメソッドをオ...
#ref(BasicOperationOfRealProxy2.png,left,nowrap,透過プロ...
***(3) [#w7016341]
-透過プロキシは、Invokeメソッド内でリモート処理 基盤技術...
--透過プロキシのポイントは、透過プロキシのInvokeメソッド...
呼び出しメソッドのメソッド シグネチャの情報が引数として与...
---メソッド シグネチャとは、一般的に、~
「メソッド名」、「パラメタ数と順序、パラメタの型」、「戻...
-透過プロキシのInvokeメソッドから使用したいオブジェクトに...
最終的にレイトバインド 技術を使用することになる。
--.NETでは、System.Reflection名前空間のクラスライブラリを...
-レイトバインドを使用する場合は、メソッド シグネチャを固...
--言語によっても異なるが、C++、C#のような「強い静的型付け...
実行に任意のオブジェクトに対して任意のメソッド呼び出しを...
---C++では、これを仮想関数呼び出しやCOMで実現する。
---C#では、System.Reflection名前空間のクラスライブラリを...
---これに対し、VBではobject型に任意のメソッド呼び出しを記...
-透過プロキシのInvokeメソッドには、~
呼び出しメソッドのメソッド シグネチャの情報が引数として与...
これを使用して、どのようなメソッド呼び出しも転送すること...
#ref(BasicOperationOfRealProxy3.png,left,nowrap,透過プロ...
**透過プロキシでAOPを実現 [#ef5ee71f]
透過プロキシの働きについては、[[前項>#y244fdd9]]で説明し...
-ここまでの説明で明らかであるが、透過プロキシを使用したAO...
透過プロキシのInvoke メソッドにアスペクトを実装するだけの...
--ここでは、透過プロキシの本来の~
「リモート処理 基盤技術を使用して境界を越えオブジェクトを...
役割は不要であるため、その部分の実装も不要である。
-また、様々な仕掛け(定義情報など)を用いることで、~
以下の様な機能を追加することも可能である。
--以下からウィービングされるアスペクトのパターンを可変に...
---コンストラクタに指定されたリテラル
---メソッドに指定されたアノテーション(クラス / メソッド...
--アスペクトの実装位置を、透過プロキシ上から他のモジュー...
---コンストラクタに指定されたリテラル
---メソッドに指定されたアノテーション(クラス / メソッド...
しかし、ココでは、これらの応用的な利用方法までは説明しな...
*動作確認用のサンプル プログラム [#lbff0d38]
-透過プロキシを使用したAOPの動作確認用~
サンプル プログラムを用いて、AOPの実装方法を説明する。
--サンプル プログラムはConsoleアプリケーションで作成され...
--プロジェクトの構成は次のようになっている。
-サンプル プログラム~
>&ref(RealProxy.zip);
-クラス(モジュール)一覧
|項番|クラス(モジュール)|説明|h
|1|TG.cs|ターゲット クラス(ココで言うオブジェクトA|
|2|PR1.cs|透過プロキシ1(オブジェクトAのインスタンスを...
|3|PR2.cs|透過プロキシ2(オブジェクトAのクラス型情報を...
|4|MyInt.cs|参照型を引数に使用した場合の動作検証に用いる...
|5|Program.cs|各種テスト ケースを実行するエントリポイン...
**ターゲット クラス [#k301427f]
ターゲット クラスは、本書で説明した「オブジェクトA」、~
すなわち、クライアントが使用したいオブジェクトのことであ...
実装のポイントは、MarshalByRefObjectクラスを継承すること...
サンプル プログラムでは、様々なシグネチャのメソッドの呼び...
様々なシグネチャのメソッドをターゲット クラスに実装してあ...
**透過プロキシ [#r556d2a8]
-実装のポイントは、RealProxyクラスを継承することである。
-サンプル プログラムには、アスペクトは実装していないので、~
任意のアスペクトのパターンを、ここでウィービングするよう...
***コンストラクタ [#kc1ae4e5]
また、透過プロキシ1、2で、コンストラクタの実装が若干異...
異なる点は、ターゲット クラスのオブジェクト インスタンス...
-透過プロキシ1~
コンストラクタから、ターゲット クラスのオブジェクト イン...
-透過プロキシ2~
コンストラクタからクラス情報を受け取り、~
これを使用してターゲット クラスのオブジェクト インスタン...
***Invokeメソッド [#cf5bea3e]
透過プロキシ1、2ともInvokeメソッドの実装は同じである。
----
Tags: [[:プログラミング]], [[:.NET開発]]
ページ名: