AspectJ と PostSharp の AOP 機能の違いを知っている人はいますか (はい、異なる言語とプラットフォーム用であることはわかっています)。
私は、AspectJ がどのようなことを許可し、PostSharp が許可しないか、またはその逆を理解しようとしています。
PostSharp 2.0 は、PostSharp 1.5 よりもはるかに AspectJ に近づいています。PostSharp 1.5 と Spring AOP の比較は正当化されましたが、PostSharp 2.0 ではそうではありません。
ただし、アプローチにはまだいくつかの大きな違いがあります。
ポイントカットへのアプローチは根本的に異なります。AspectJ は複雑なポイントカット言語を提供します。PostSharp は基本的な宣言型ポイントカット システムを提供しますが、命令型ポイントカットを開発できるため、コンパイル時にポイントカットを評価するコードを (通常は System.Reflection を使用して) 記述できます。したがって、ポイントカット言語を使用する代わりに、PostSharp はプレーンな C# または Linq をサポートします。
実際、条件付きポイントカット (cflow) はありません。
PostSharp は、イベントやプロパティなど、高次のセマンティクスをサポートしています。私の知る限り、AspectJはそうではありません(Java afaikにはイベントやプロパティがないため)。
PostSharp アスペクトは通常、ビルド時にインスタンス化および初期化され、アセンブリにシリアル化され、実行時に逆シリアル化されて実行されます。これにより、ビルド時にアスペクトを「初期化」できるため、実行時のパフォーマンスが向上します。また、ビルド時に複雑なロジックを任意に実行することもできます (通常は、初期化、ポイントカット評価、ジョインポイント検証)。
PostSharp は、アスペクト構成を実際にサポートしています。つまり、複数のアスペクトまたはアドバイスを同じジョインポイントに予測的に適用できます。PostSharp は、複数の側面を持つベンダーがお互いを認識していないマルチベンダー シナリオ向けに設計されています。依存関係の複雑なシステムがあり、アスペクトの開発者/ベンダーは、順序付けの制約、要件、および競合を宣言的に指定できます。
バージョン 2.0 から、PostSharp には、Eclipse 用の「AJDT」の機能を部分的にカバーする IDE ツールが付属しています。
PostSharp のドキュメントから: http://doc.postsharp.org/1.5/##PostSharp.HxS/UserGuide/Laos/AspectKinds/Overview.html
サポートされている結合ポイントのタイプ: http://doc.postsharp.org/1.5/##PostSharp.HxS/UserGuide/CoreLibrary/CodeWeaver/Overview.html
AspectJ は、必要なことを行うために、結合ポイントが明らかにより複雑になる可能性があるため、柔軟性が大幅に向上します。
たとえば、cflow は PostSharp では実行できないようです。
使いやすくするために AOP の機能を取り除いたバージョンであるという点で、Spring に似ています。
更新: 完全に更新されたとは思いませんが、これは AspectJ がサポートするものに関する良い考えです: http://www.eclipse.org/aspectj/doc/released/progguide/index.html