質問

私は、セキュリティ、ロギング、検証などの横断的な問題に対して、いくつかの基本的な AOP スタイルのソリューションを使用してきました。私の解決策は次のようなものです ウィンザー城 そしてダイナミックプロキシ。Boo ベースの DSL を使用してすべてを適用し、コードから属性をクリーンに保つことができるため、私はこの方法を採用しました。週末に見てみるように言われました ポストシャープ それは「より良い」解決策であるはずだからです。PostSharp をざっと見たことはありましたが、属性の使用法にがっかりしました。

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

役に立ちましたか?

解決

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

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

しかし...

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

他のヒント

PostSharp に関するいくつかの小さな問題...

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

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

(これが意味があるといいのですが)

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