sfpot aop
TRANSCRIPT
Khalid Abdelmoumni Dévelopeur PHP / Symfony / Zend chez virtual expo.
mail : [email protected]
twiter: @icecorporation
ABOUT ME
Langage machine → programmation structurelle → procedural → modulaire → orienté-objets → ...
EVOLUTION des PARADIGMES de PROGRAMMATION
Issu de l'évolution de plus en plus complexe des besoins et d'une volonté de représenter le monde. Introduit de nouvelles approches pour concevoir du code plus lisible et plus réutilisable (erradication des "gotos" au profit des boucles, introduction des types et des structurations modulaires autour des classes)
PROGRAMMATION ORIENTE OBJET
POINTS FORTS POO
● Méthode de conception● Rigueur● Définitions des besoins métier● Niveau abstraction plus élevé● Industrialisation des composants
● Difficulté à modéliser les fonctionnalités globales (« crosscutting concerns »).
● Peut conduire à l'émergence de classes et/ou modules moins indépendants moins réutilisables.
● Ne peut permet pas d'éliminer certains "Concerns"
POINTS FAIBLES POO
Quelques généralités
● Concue par G.Kiczales et son équipe au Xerox Parc en1996
● Définie comme la technologie du futur par le MIT Champ de Recherche ACctif
PROGRAMMATION ORIENTE ASPECT
Nouvelle philosophie de programmation● Complémentaire à la POO● Permet de séparer la description des
aspects métiers et techniques● Décrit et détermine le code des aspects
dans un nouveau type d’entité logicielle● Fusionne le code des aspects
techniques et le code métier selon les points transversaux.
SOLUTION : AOPELIMINER LES SPAGHETTIS !!!!
● Maintenance aisée : indépendance utilisation
● Meilleure réutilisation : indépendance environnement, métier, domaine d'application
● Gain de productivité : parallélisation des développements
● Meilleure qualité du code par une simplification donc meilleure lecture
AVANTAGES AOP
1. 1. Déterminer les couches métier de l'application et ensuite
1. 2. Définir les aspects transverses.
PENSER ASPECT...
● Sécurité● Persistence● Authentication● Gestion transactionnelle● Performance● Journalisation● Gestion des erreurs
Les Coupes Transverses
Un aspect est un module définissant des greffons et leurs points d'activation
Les Mots-Clés....ASPECT
Point de coupeLocalisation du logiciel où est inséré un greffon par le tisseur d'aspect.
Les Mots-Clés....POINT CUT
GreffonUn programme qui sera activé à un certain point d'exécution du système, défini par un point de jonction.
Les Mots-Clés....ADVICE
Préoccupations transversales Mix au sein d'un même programme de sous-programmes distincts couvrant des aspects techniques séparés.
Les Mots-Clés....Cross-cutting concerns
TissageInsertion statique ou dynamique dans le système logiciel de l'appel aux greffons.
Les Mots-Clés....WEAVING
Point de JonctionLocalisation spécifique dans le flot d'exécution du système, où il est possible d'insérer un greffon : avant, autour, à la place, après.
Les Mots-Clés....JOIN POINT
AOP...En BREF
En résumé, l'AOP consiste à :
● Identifier les cross cutting concerns● Ecrire les greffons-advices qui représentent
l'aspect et qui permettent d'encapsuler les préoccupations transersales
● Choisir où appliquer ses greffons : pointcuts
JAVA AspectJ : Extension du langage Java nécessitant donc une étape de précompilation. Le résultat est toutefois du bytecode Java standard. JAC (Java Aspect Components) : Framework 100 % Java. Spring : Spring AOP PYTHON Aspyct : Moteur de programmation orientée aspect et autre Aspects.py : Bibliothèque léger et de bas niveau pour intercepter les appels de fonction.
PHP AOP-PHP Extension pecl téléchageable https://github.com/AOP-PHP/AOP JMSAopBundle Bundle symfony accessible http://jmsyst.com/bundles/JMSAopBundle
Les Mots-Clés....TISSEURS d'ASPECT
● N'est pas supporté nativement● Des solutions existent
Créée par Julien Salleyron, Gérald Croës Installation simple
- git clone https://github/AOP-PHP/AOP - cd AOP - phpize - ./configure - make - make test - make install
AOP sans Symphony AOP - PHP
● aop_add_before('MyServices->doStuff()', $advice);
● aop_add_after('MyServices->doStuff()', $advice);
● aop_add_around('MyServices->doStuff()', 'adviceUpdatingArguments');
QUELQUES COMMANDES
Avantages PHP-AOPSimple à mettre en place, projet prometteur et très bonne documentation.
Quelques liens:http://www.croes.org/gerald/projects/aop/documentation_aop_extension_php.pdf
http://aop-php.github.com/
CONCLUSION PHP-AOP
JMSAopBundle● Créer par Johaness Smith ● Intégrer dans la version standard de
symfony.
AOP ET SYMPHONY
● Installation standard
● Utilisation est simple ■ Créer un intercepteur ■ Créer un point de coupure
JMSAopBundle
● Créer une classe MethodInterceptorInterface
● Injecter via le constructeur les services transversaux necessaire comme le Logger, SecurityContext, EntityManager …
● Créer la méthode intercept(MethodInvocation $invocation) et
● Intégrer le greffon ● Appeler la méthode invocation->proceed()
INTERCEPTEUR
● Création d'une classe qui implémente la classe PointcutInterface
● Création les méthodes function matchesClass(\ReflectionClass $class) et matchesMethod(\ReflectionMethod $method)
POINT DE COUPURE
<service id="my_logging_pointcut" class="Acme\DemoBundle\Aop\LoggingPointcut">
<tag name="jms_aop.pointcut" interceptor="logging_interceptor" />
<argument type="string">helloAction</argument>
</service>
SERVICES
<service id="logging_interceptor" class="Acme\DemoBundle\Aop\LoggingInterceptor">
<argument type="service" id="security.context" />
<argument type="service" id="logger" />
</service>
Avantages JMSAopBundle Simple à mettre en place
Désavantage JMSAopBundlePerfomance : Etre vigilant sur les points de jointure (WildCard)
CONCLUSION