2009-09-01 12 views
2

C#でAOPを使用してクラス関数に属性を適用するにはどうすればよいですか?アスペクト指向プログラミング?

更新:AOPをどのようなコンテキストで使用するべきかはっきりしないのですか? AOPをログに記録するためにAOPを使用できるので、AOPを利用できる他のシナリオを提案してください。

AOPはアプリケーションプロセスで異なる実行スレッド間でデータを共有するために使用できますか?

答えて

4

C#ではAOPを大きくサポートしていません。

フレームワークであるPostSharpがあります。ご覧になる場合があります。それはおそらくあなたが望むものを得るでしょうが、それは決してJavaほど良くはありません。

- 編集

あなたは、またDynamicProxyを(IIRC)をContextBoundObjectクラスに見て、そして、PostSharpのようなフレームワークを使用したくない場合。しかし、これらの両方で、継承チェーンへの変更、またはオブジェクトのインスタンス化の方法の変更が必要です。

+1

hmm..pleaseは、C#でより良いアプローチであるOOPまたはAOPを提案していますか? –

+1

ダウン投票の理由を提供する方が良い。 – rahul

+0

Jaswant:http://stackoverflow.com/questions/232884/aspect-oriented-programming-vs-object-oriented-programmingおよび他の多くのものを参照してください。 –

5

AOPは、システム内の多くのオブジェクトで必要とされるが、それらのオブジェクトの心配ではない機能であるクロスカッティングの問題をカバーするように設計されています。このような要件がシステム全体のオブジェクトにクロスカッティングの問題をコーディングすることによって満たされれば、多くのオブジェクトに分割された扱いにくい、メンテナンスが難しくなります。

古典的なクロスカッティングの例はロギングです。ロギングは実際のシステムでは不可欠であり、そのシステム全体で実装する必要がありますが、実際にはシステム内のオブジェクトの関心事ではありません。システムはロギングを実装するために売上税計算オブジェクトを必要とするかもしれませんが、ロギングは実際には売上税計算オブジェクト自体の懸念事項ではありません。 AOPを使用すると、これらのシステム全体の(クロスカッティング)要件をメインビジネスロジックとは別に指定し、実行時またはコンパイル時の両方でこれらを組み合わせることができます。

AOPは、オブジェクトのメソッドへの呼び出しをインターセプトすることによって動作します。インターセプトポイントはポイントカットと呼ばれ、インターセプトされたメソッドはアドバイスされたメソッドであり、アドバイスとして知られているインターセプトされたメソッドにアドバイスされます。私はSpring.NetのAOPフレームワークを介してAOPに精通しています。このフレームワークでは、設定ファイルとプログラムによるポイントカットとアドバイスの指定と適用が可能です。 Spring.Net AOPには、アドバイスされたメソッドの傍受で呼び出される前後、前後、スローの4種類のアドバイスがあります。の前にアドバイスされたメソッドが呼び出されます。の後に呼び出されます。それぞれ例外がスローされます。コンフィグレーションまたはプログラムによる適用のいずれにおいても、のメソッドには、Spring.Net AOPについての知識がなくても、それがアドバイスされていることさえあります。

AOPが有用な別の例は、トランザクションです。これをオブジェクト内のコードで実装しようとすると、トランザクション内で動作していることを認識しなければならないオブジェクトになります。これは、私の考えでは、望ましい設計機能ではありません。 AOPを使用することで、トランザクションに参加するオブジェクトの外部でトランザクションを作成および調整することができ、より安定したメンテナンスに適した設計が可能になります。

Spring.Netのドキュメントは、AOPの一般的な説明とSpring.NetのAOPの実装について特に説明しており、多くの例があります。Spring.Net AOPフレームワークの使用を検討していなくても一見価値があります。

関連する問題