Programmation Orientée Aspect

La mise en place de l'AOP

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

La programmation orientée aspect (AOP) est actuellement absente dans notre projet de gestion de la bibliothèque. Cependant, il est important de comprendre ce concept afin de pouvoir aller plus loin dans le développement des applications, non pas seulement développées sous Spring.

Qu'est-ce que c'est, la programmation orientée aspect ?

Imaginons la problématique suivante : une application mise en place il y a 10 ans ne rajoute pas les logs sur chaque méthode appelée. Pour faciliter la maintenabilité, désormais on veut appeler la méthode de loggage au début et à la fin de chaque fonction.

Deux approches se proposent automatiquement : soit on modifie toutes les classes, soit on utilise l'AOP. Le premier est plus facile (pour ceux qui ne connaissent pas l'AOP) mais aussi plus long à mettre en place. En outre, il garantit une perte de temps considérable si la situation se reproduit dans l'avenir. L'implémentation de l'AOP s'impose alors naturellement comme la solution la plus rapide et la plus stable.

AOP permet d'introduire une modification sans toucher au code de source. Dans notre cas, on peut facilement déterminer qu'au début et à la fin de chaque méthode une action de loggage doit être effectuée.

Pour généraliser la définition, on peut considérer que l'AOP regroupe des bouts de code qui doivent être exécutés à des endroits précis du système. La logique de l'AOP se résume à des notions suivantes :
- Aspect (en français : aspect) : est représenté par les objets dont les classes implémentent l'interface Advisor. Ses classes-filles, PointcutAdvisor et IntroductionAdvisor, permettent de manipuler les objets à des niveaux différents.
- Join point (points d'exécution) : définit les points dans l'application qui permettent d'introduire l'aspect (par exemple : lors de l'initialisation d'un objet)
- Advice (greffon) : signifie le code qui s'exécute dans le joinpoint.
- Pointcut (points d'action, de coupure ou de greffe) : collection des jointpoints qui définit les endroits où l'advice sera appelé
- Introduction : est un processus qui permet de modifier la structure d'un objet. Ici on peut, par exemple, implémenter l'interface à un objet sans besoin que la classe l'implémente aussi.
- Target object : illustre l'objet qui est censé d'être modifier par l'aspect.
- Weaving (tissage ou tramage) : est un processus qui insère les aspects dans le code. Il est réalisé à travers la classe ProxyFactory.

Spring supporte 5 types de greffons :
- around : permet d'appeler greffon avant ou après le point d'exécution
- before : exécuté avant le point d'exécution
- after throwing : appelé au moment où une exception est lancée
- after returning : greffon exécuté après le retour d'un résultat par une méthode (retour normal, sans avoir lancée une exception)
- after finally : comme le type précédent, le greffon est exécuté à la sortie de la méthode appelée. A la différence de l'after returning, le greffon est appelée même si une exception est lancée dans le point d'exécution

Flux d'exécution

TODO : rédiger cette partie après la mise en place de l'AOP

Bilan de l'AOP

Un aspect positif de l'AOP est lié au mot "facilité". L'AOP rend la maintenance d'une application plus simple et plus flexible. Le développeur peut se concentrer sur un aspect de l'application et donc produire du code plus lisible. Egalement l'intégration de nouveaux modules est facilitée. Ils pourront se greffer aisément au système actuel grâce à des points d'exécution. Il n'est donc pas nécessaire de modifier le code de chaque classe à laquelle on veut rajouter une nouvelle fonctionnalité.

Cependant, une notion rajoute un point du côté du "négatif" dans le bilan. Des déboggeurs ou des profileurs peuvent ignorer la présence du code généré dynamiquement. Cela peut rendre la phase des tests plus compliquée.

AOP Proxies

TODO : à rédiger (notion de proxy, illustrer et expliquer la phrase "Spring AOP defaults to using standard J2SE dynamic proxies for AOP proxies. This enables any interface (or set of interfaces) to be proxied.")

La mise en place de l'AOP

TODO : rédiger ce fragment et mettre l'AOP dans notre application

Bartosz KONIECZNY Concepts de base

Une question ? Une remarque ?

*

*

Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil Zend Framework

Comment faciliter le travail entre notre application et l'Ajax ?

L'un des moyens est l'utilisation du ContextSwitch. Il permet de définir le type de réponse renvoyé.