13

私は、セキュリティ、ロギング、検証などの分野横断的な問題に対して、いくつかの基本的な AOP スタイルのソリューションを使用してきました。Boo ベースの DSL を使用してすべてを適用し、コードを属性からきれいに保つことができるため、私のソリューションはCastle Windsorと DynamicProxyを中心に展開しています。 . 週末に、「より良い」ソリューションであるはずのPostSharpを調べるように言われました。私は PostSharp をざっと見てきましたが、属性の使用法に気が進まなかったのです。

両方のソリューションを試してみて、その経験を共有したい人はいますか?

4

2 に答える 2

14

PostSharpに関するいくつかのマイナーな問題...

PostSharpで発生した問題の1つは、asp.netを使用しているときに、PDBも挿入されないため、PostSharpによってアセンブリに挿入されたIL命令の数だけ例外メッセージの行番号が「出力」されることです:-)。

また、実行時に利用可能なPostSharpアセンブリがないと、実行時エラーが発生します。Windsorを使用すると、コードを再コンパイルせずに、後日クロスカットをオフにすることができます。

(これが理にかなっていることを願っています)

于 2008-09-18T16:18:29.357 に答える
10

Castle-Windsor を (まだ) 短時間しか見ていないので、それについてコメントすることはできませんが、postsharp を使用しました。

Postsharp は、コンパイル時にウィービングすることで機能します。コードを変更するコンパイル後のステップをビルドにアドバタイズします。コードは、クロス カットの問題をコードにプログラムしたかのようにコンパイルされます。これは、ランタイム ウィービングよりも少しパフォーマンスが高く、属性を使用するため、Postsharp は非常に使いやすいです。AOP に属性を使用することは、DI に使用する場合ほど問題ではないと思います。しかし、それは私の個人的な好みです。

しかし...

依存性注入にキャッスルを既に使用している場合、AOP にもキャッスルを使用してはならない理由がわかりません。実行時の AOP はコンパイル時よりも少し遅いですが、より強力でもあると思います。私の意見では、AOP と DI は関連する概念であるため、両方に 1 つのフレームワークを使用することをお勧めします。だから、AOP が必要な次のプロジェクトで城のことをもう一度見ることになるでしょう。

于 2008-09-15T13:34:31.337 に答える