2010-11-22 7 views
1

J'ai récemment lu un interesting blog post sur les arguments d'Anders Hejlsberg contre AOP.Comment AOP aide-t-il à la liaison de données?

Le premier argument anti-anti mentionne les données obligatoires: «programmation orientée aspect est intéressant pour le débogage et l'instrumentation de code et n'est pas une discipline de programmation à part entière »

Mythe 1.

Vérité 1. Anders s'est probablement arrêté à l'exemple "Bonjour, monde". Bien que l'instrumentation de code soit certainement un cas d'utilisation important de l'AOP - et celui que vous verriez dans chaque documentation de "démarrage" - la technologie simplifie considérablement le travail des développeurs quand il s'agit d'implémenter des applications non triviales et réelles. application de la vie. Pour ne citer que quelques scénarios de la vie réelle où AOP aide vraiment:

* Data Binding (INotifyPropertyChanged) 

Je suis en train de penser à la façon dont l'AOP est utilisé dans un scénario de liaison de données. J'ai toujours supposé que la reliure reposait sur la réflexion pour faire de la «magie». Je suis sûr que tout ce dont vous avez besoin dans un scénario contraignant est disponible via la réflexion. L'AOP est-il utilisé pour un (léger) boost de performance?

Répondre

3

Ce n'est pas la liaison de données à laquelle il fait référence, mais la partie INotifyPropertyChanged (et similaire) que AOP brillerait vraiment.

Actuellement, lorsqu'une classe implémente INotifyPropertyChanged, les propriétés ressembler à ceci:

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

Où avec AOP décent, ils pourraient ressembler à ceci

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

fait une grande différence de lisibilité, surtout quand le setter pour un couple de propriétés a quelques règles réelles en elle.

Même avec des classes de base génériques, les expressions, la réflexion, et quelques implémentations difficiles, le meilleur que vous espérez est:

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

Et même ce n'est pas aussi lisible (et est moins performant ainsi)

+0

Très bonne réponse. Je ne code pas beaucoup dans WPF, donc quand je pense à la liaison de données, je pense à ASP.NET, et je pense à une seule façon de lire (dans lequel la réflexion serait parfaitement bien). Merci. –

Questions connexes