La programmation orientée objet est un concept très connu de nous tous, mais elle a cependant des inconvénients. L'héritage ne permet pas d'éviter complètement la duplication du code. Certains éléments de code sont même parfois impossible à centraliser, ce qui rend les choses beaucoup moins élégante et maintenable.
La programmation orientée ASPECT (AOP Programming) permet d'enrichir un modèle objet.
Prenons l'exemple d'une classe métier qui va gérer des produits.
public static class Product
{
public static void Order(...) { }
public static void Remove(...) { }
public static void Add(...) { }
public static void Update(...) { }
}
Nous souhaitons implémenter sur cette classe, l'aspect sécurité, la trace des actions effectuées, bref tout un tas de fonction de second plan par rapport à la fonctionnalité même! Oui oui la sécurité c'est important aussi, mais c'est pas le but de notre classe finalement... Alors certain me diront ok, très bien alors on fait une classe static, on la référence et on fait nos vérifications. Si on suit cette règle, notre classe métier référencera des composants techniques, chose qui n'est pas très très élégante, même si on trouve beaucoup de projet ainsi. La solution consiste à introduire deux aspects à notre classe, l'aspect sécurité, ainsi que l'aspect logging.
Réalisation avec ASPECTDNG pour la partie logging :
Le fonctionnement est sympa, il suffit de décrire dans un fichier les méthodes à tisser, ici nous allons tisser toutes les méthodes pour la trace.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="iso-8859-1" />
<xsl:template match="node()">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Method">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates select="Parameter" />
<xsl:apply-templates select="Local" />
<Instruction offset="-2" code="ldstr" operand="Ma Trace" />
<Instruction offset="-1" code="call" operand="System.Console WriteLine(System.String)" />
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Après la compilation, ASPECTDNG patch le code existant afin de réaliser les actions conformément au fichier ci dessus.
On a donc aucune dépendance dans notre code source, le code est plus élégant et plus maintenable .. Il nous faut juste déclarer nos actions dans le fichier ASPECTDNG.
La programmation par aspect est vraiment puissante lorsqu'on l'utilise de pair avec notre modèle objet classique, je vous invite fortement à étudier
ces concepts, pour ceux qui ne l'on pas déjà fait. 
D'autant plus que ce n'était vraiment qu'un aperçu très très mince de ses fonctionnalités. 