Connaissez vous le concept de la programmation orientée aspect (AOP) ?
En tant que Développeur informatique, j’ai eu à résoudre des problématiques purement techniques récurrentes, telles que la gestion des logs ou encore la sécurisation des Web Services. Mais c’est souvent les mêmes traitements. Les dupliquer est non seulement une grande perte de temps mais en plus ça va contre un des principes importants du Clean Code : DRY (Do Not Repeat Yourself). Vous aviez déjà été confronté à ce problème. N’est-ce pas ?
C’est pour cela que je vous propose aujourd’hui de voir ensemble le concept de l’AOP qui peut vous aider.
Intérêt d’un AOP :
L’AOP (Aspect Oriented Programming) ou encore la programmation orientée aspect est un paradigme de programmation qui permet au développeur de se concentrer uniquement sur le code métier en délégant la résolution des problématiques transversales à des méthodes ou librairie dédiées. Les besoins purement techniques sont alors réglés dans un seul endroit, une fois pour toutes. Il suffira ensuite de suivre les patterns choisies dans l’implémentation des règles d’exécution des fonctionnalité AOP.
Nous pouvons noter les avantages suivants pour l’implémentation de l’AOP :
1. Amélioration de la lisibilité du code : le code est plus straightforward, et n’est pas brouillé par des directives purement techniques
2. Améliorer la réutilisation du code : le code de l’AOP est réutilisé dans plusieurs endroits du code
3. Améliorer la maintenabilité du code : le code est plus maintenable vu que les aspects purement techniques sont décorrélés des fonctionnalités métier de l’application
Exemples triviales d’utilisation de l’AOP :
- Quand nous avons une application en production qui plante, nous souhaitons avoir les logs les plus verbeux pour suivre le traitement, et ainsi, trouver l’origine du bug. Rajouter des lignes de logs pour chaque entrée/sortie d’une méthode est très moche et perturbe la lisibilité du code. Vous l’aviez certainement deviné : la journalisation est un excellent cas d’utilisation de l’AOP !
- L’AOP permet aussi de gérer les transactions avec la base de données d’une façon automatique. Contrairement à la gestion traditionnelle “à la main” des transactions, il vous permet de vous assurer des fermetures des connexions, sans parler du gain de temps et de lisibilité.
- La gestion des exceptions les plus génériques non attendus peut se faire grâce à l’AOP. Ceci évite Les erreurs HTTP de type Internal Server Error. Des logs doivent être rajoutés bien évidement, et un suivi rigoureux doit être fait pour trouver la cause de ce plantage.
Principe technique :
L’idée est de créer des points d’insertion (pointcut) pour l’exécution des Aspects. Ce sera leurs conditions d’exécution. Ces pointcut peuvent être de type variés telle que :
- avant : pour AspectJ @org.aspectj.lang.annotation.Before
- après exécution réussie d’une méthode : pour AspectJ @org.aspectj.lang.annotation.AfterReturning
- après exception non gérée d’une méthode : pour AspectJ @org.aspectj.lang.annotation.AfterThrowing
- autour d’une méthode : pour AspectJ @org.aspectj.lang.annotation.Around
En pratique :
En Java, la librairie la plus répondue est AspectJ. Si vous faites du spring-boot, elle est automatiquement importée avec la lib spring-context.
@Les développeurs d’autres langages : vous pouvez poser vos questions en commentaire si vous souhaitez que je parle des outils de votre langage préféré.
Les expressions peuvent se référer à toutes les « nomenclatures » du code :
- La portée (private, protected, public, package, ou tout)
- Le chemin exact d’une méthode (com.entreprise.project.package.MyClass.toto(..))
- Toutes les méthodes d’une classe sans distinction
- Toutes les méthodes d’une classe ayant un paramètre d’un type donné
- Toutes les méthodes de toutes les classes sous le package principal du projet (com.entreprise.project)
- Les méthodes ayant une annotation donnée et ayant un type de paramètre donné
Bref, les expressions dépendent vraiment du besoin qu’on a.
Conclusion :
L’AOP présente un outil puissant pour le développeur pour répondre aux besoins transverses de son application. Cependant, il est important de l’utiliser avec rationalisation pour ne pas engendrer du fonctionnement « magique » de l’application.
Vous aussi vous utilisez l’AOP dans vos applications ? Partagez avec moi votre expérience avec cet outil magnifique dans les commentaires !
- Ahmed ABIDA