3

たとえば、クラスClassAを作成しました。ある日、プロパティ値の変更を監視し、変更に対応したいと思うまではうまくいきます。そうする最も速い方法は何ですか?

私が考えることができる1つのアプローチ:ClassAにINotifyPropertyChangedを継承させ、プロパティゲッター/セッターを変更してPropertyChangedイベントをトリガーし、イベントが発生したときに何かをします。

ただし、これは、 ClassAに監視対象のプロパティが数十個ある場合、面倒なコード変更を意味する可能性があります。

反応ロジックを接続できるように、ClassAをラップまたは変更するよりエレガントな方法はありますか?

空想: アトリビュートはそれを行うことができますか? まったくナンセンスかもしれませんが、属性を作成し、この属性を監視したいプロパティに追加するだけです。ゲッター/セッターを追加/変更するよりも優れています。

4

1 に答える 1

1

調べたいことは、AOP (アスペクト指向プログラミング) の使用です。つまり、これにより、クラス メソッドとプロパティの周りにラッパーを置き、呼び出しの前後に反応することができます。

ラッパークラスでは、このようなものがあります

Invoke(Args[] Args, Aspect Aspect)
{
  //Do something like monitor something here 
  Aspect.Invoke //execution of method or property
 //Do other stuff here... maybe more monitoring
}

これの利点は、関心の分離です。ClassA では、コードを監視するコードを気にすることなく、以前に焦点を合わせていたものに引き続き焦点を当てることができます。ラッパーは、監視を処理するものです。

参考資料:

AOP の詳細情報 http://en.wikipedia.org/wiki/Aspect-directional_programming

アプリケーションに AOP を実装するために使用できる C# ライブラリ。Castle Project/動的プロキシ http://www.castleproject.org/projects/dynamicproxy

于 2012-12-16T08:29:59.017 に答える