sfpot aop

39
Aop

Upload: khalid-abdelmoumni

Post on 15-Jul-2015

503 views

Category:

Technology


0 download

TRANSCRIPT

Aop

Khalid Abdelmoumni Dévelopeur PHP / Symfony / Zend chez virtual expo.

mail : [email protected]

twiter: @icecorporation

ABOUT ME

INTRODUCTION

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

PROGRAMMATION ORIENTE ASPECT

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

FOCUS

DEPENDANCE

1. 1. Déterminer les couches métier de l'application et ensuite

1. 2. Définir les aspects transverses.

PENSER ASPECT...

EXEMPLES EN IMAGES

EXEMPLES EN IMAGESEXEMPLES EN IMAGESEXEMPLES EN IMAGES

● 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

Les Mots-Clés....ASPECT

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

AOP...En BREF

AOP...En BREF

Il va falloir apprendre à Tisser !

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

A vous de jouer ...