8

PostSharpのようなポストコンパイラが必要になる理由を理解するために私は戦っていますか?

私の理解では、元のコードの属性にコードを挿入するだけなので、開発者はなぜそのコードを自分で記述しないのでしょうか。

メソッドの属性を使用してボイラープレートコードを乱雑にしないので、誰かが書くほうが簡単だと言う人がいると思いますが、それはDIまたはリフレクションを使用し、ポストコンパイラなしで少し先見の明を持って行うことができます。リフレクションを言ったので、パフォーマンスエレファントが入ることはわかっていますが、ほとんどのシナリオの絶対パフォーマンスが取るに足らない(サブミリ秒からミリ秒)場合、ここでは相対的なパフォーマンスは気にしません。

4

4 に答える 4

12

適切に設計され、十分にテストされたクラスが既にあるとします。いくつかのメソッドにタイミングを簡単に追加したいとします。はい、依存性注入を使用して、オリジナルにプロキシするデコレータクラスを作成できますが、各メソッドのタイミングがありますが、そのクラスでさえ繰り返しの混乱になります...

... または、リフレクションをミックスに追加し、何らかの説明の動的プロキシを使用することもできます。これにより、タイミング コードを 1 回記述できますが、そのリフレクション コードを適切に取得する必要があります。これはそれほど簡単ではありません。 、特にジェネリックが関係している場合。

... または、時間を計測する各メソッドに属性を追加し、タイミング コードを 1 回記述して、コンパイル後の手順として適用することもできます。

どちらが私にとってよりエレガントに見えるか、コードを読むとより明白になるかを知っています。これは、DIが適切でない (そして、システム内のすべてのクラスに実際には適切ではない) 状況でも適用でき、他に変更を加える必要はありません。

于 2009-10-01T08:58:15.920 に答える
5

AOP(PostSharp)は、アプリケーション内のあらゆる種類のポイントに1つの場所からコードを添付するためのものであるため、そこに配置する必要はありません。

PostSharpがReflectionでできることを達成することはできません。

ほとんどのことは他のより良い方法(ロギングなど)で実行できるため、個人的には本番システムでの大きな使用は見ていません。

この問題に関する他のスレッドを確認することをお勧めします。

于 2009-10-01T08:55:31.323 に答える
3

アスペクトは、すべてのコピー & ペースト - コードを取り除き、新しい機能をより速く追加できるようにします。

たとえば、同じコードを何度も書かなければならないことほど嫌いなことはありません。Gael の Web サイト (www.postsharp.net) には、INotifyPropertyChanged に関する非常に優れた例があります。

これはまさに AOP の目的です。技術的な詳細は忘れて、求められていることを実装するだけです。

長い目で見れば、今のソフトウェアの書き方に別れを告げるべきだと思います。ボイラープレート コードを記述して手動で繰り返すのは、退屈で明らかにばかげています。

未来は、オブジェクト指向フレームワークによってまとめられた宣言的で機能的なスタイルに属し、クロスカッティングの問題はアスペクトによって処理されます。

すぐにそれを手に入れられないのは、コード行に対してまだお金を払っている人だけだと思います。

于 2010-06-02T10:23:44.000 に答える