2010-11-22 11 views
1

私は最近、AOPに対するアンダース・ヘルスバーグの引数にinteresting blog postをお読みください。はどのようにAOPは、データバインディングに役立つのでしょうか?

最初の抗抗引数は言及データバインディング:

神話1.「アスペクト指向プログラミングコードのデバッグおよび計測のために面白いですし、本格的なプログラミングの規律ではありません。」

真実1.アンダースは、おそらく「こんにちは、世界」の例で停止しました。

コードインストルメンテーションは、AOPの重要な使用例でもありますが、すべての「入門」ドキュメントで目にするものですが、この技術は、開発者の作業を大幅に単純化し、ライフアプリケーション。

* Data Binding (INotifyPropertyChanged) 

私はAOPは、データバインディングのシナリオで使用されているかを考えるようにしようとしている:ちょうどAOPは本当に役立ちますいくつかの現実のシナリオを引用します。私はいつもバインディングがリフレクションに頼ってそれを「魔法」にすると仮定しました。バインディングシナリオで必要なものはすべて、リフレクションを介して入手できます。 AOPは(わずかな)パフォーマンス向上のために使用されていますか?

答えて

3

それは彼が言及していますデータバインディングではないですが、INotifyPropertyChanged(および類似の)一部AOPは本当に輝くだろうと。

現在、クラスはINotifyPropertyChangedを実装する場合、プロパティは次のようになります。まともなAOPと、彼らはこの

[NotifyOnChange]  
public bool IsSomeProperty {get; set;} 

ようになり

private bool _isSomeProperty; 
public bool IsSomeProperty 
{ 
    get{ return _isSomeProperty;} 
    set 
    { 
    if(value != _isSomeProperty) 
    { 
     _isSomeProperty = value; 
     OnNotifyPropertyChanged("IsSomeProperty"); 
    } 
    } 
} 

して場合は特に、大きな読みやすさの違いいくつかのプロパティのsetterには実際のルールがいくつかあります。でも、一般的な基底クラス、式、反射、およびいくつかのトリッキーな実装と

、あなたが期待し最高です:

private bool _isSomeProperty; 
public bool IsSomeProperty 
{ 
    get{ return _isSomeProperty;} 
    set 
    { 
    SetAndNotify(x=>x.IsSomeProperty) 
    } 
} 

そして、それさえもが読み取り可能ではありません(と同様にパフォーマンスが低い)

+0

素晴らしい答え。私は多くのWPFのコードないので、私はデータバインディングを考えるとき、私はASP.NETを考えると、私は1つの方法は、(ここで反射が完全に大丈夫だと思う)だけ読んだと思います。ありがとう。 –

関連する問題