仕事で色々勉強しないとなのでアスペクト指向の勉強がなかなか進みません。
そんな中、なんとか前回定義したインタフェースを実装してみました。
実装したインタフェースは、IPointcut、IAspect、IMethodInvocation の3つです。クラスはそれぞれ Pointcut、Aspect、MethodInvocation としました。
今後重要になるクラスとインタフェースは次のようになると思います。
Pointcut
処理(Advice)をいつ適用するか条件を保持します。
Joinpoint(MethodInvocation)のうち、Advice を適用したい Joinpoint を正規表現などを用いた条件を使用して絞り込むためのフィルタです。
例えば、Advice を適用したいのは「add」ではじまるメソッドが実行された時だけだとすると、条件を「add*」として絞り込まれた addXxx メソッドが実行された時だけに Advice が実行されるようにしたり、指定されたメソッド名が一致するときだけAdviceが実行されるようにする、などのフィルタを作成します。
Aspect
Advice と Pointcut の関連付けを保持します。
横断的な関心事が持つ振る舞い(処理のこと)と、いつ振る舞いを適用するかを関連付けします。 Advice(Interceptor)と Pointcut をまとめたものを Aspect(アスペクト)といいます。ここでは IMethodInterceptor のみを対象とします。
MethodInvocation
処理(Advice)を割り込ませたときの本来のメソッドの実行状態を保持します。
Aspect 対象として利用元から呼び出された本来のメソッドの情報にアクセスできます。
Joinpoint(MethodInvocation)の実装時に、本来のメソッド情報や実行を提供します。
IMethodInterceptor
メソッドに対するJoinpoint(MethodInvocation)で割り込ませる処理のインタフェースです。
割り込ませたい処理の実装時には当インタフェースを利用します。
クラス図は下記のようになってます。
次は、これらを使ってみようと思います。
出来れば実用性があるサンプルが作れれば良いのですが・・・
ソースはコメントとか出来るだけ入れたものをアップしようかと思います。
それにしても、独学なんで間違った理解をしてないことを祈りたいです・・・
関連記事
VB.NET でアスペクト指向
VB.NET でアスペクト指向 (1)