implanter l'aop... comment partir du bon pied?
DESCRIPTION
Bien que l'AOP apporte plusieurs bénéfices architecturaux et techniques aux équipes qui en font usage, l'AOP vient également avec son lot de pièges. Pour ces raisons, plusieurs délaissent l'AOP à cause de la complexité indue qui pourrait toutefois être réduite en suivant de simples bonnes pratiques et en préparant adéquatement son intégration. Cette présentation a pour but d'aider une équipe à embrasser l'AOP tout en évitant les pièges. On y traitera de diverses bonnes et mauvaises pratiques avec l'AOP (architecture, IDE, refactorisation, tests...). L'accent sera placé sur des conseils pratiques comme le choix de frameworks (ex.: AspectJ ou Spring-AOP), du mode de tissage approprié à votre contexte, des conflits avec d'autres technologies Java, etc.TRANSCRIPT
![Page 1: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/1.jpg)
Implanter l'AOP... Comment partir du bon pied?
Confoo 2012
Montréal, Québec, Canada
29 février 2012
![Page 2: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/2.jpg)
Félix-Antoine Bourbonnais Ing. jr, PSM-I
Formateur et Coach Agile
Enseignement et formations o TDD, Réusinage, OO avancé,
AOP, tests, Scrum
Recherches o AOP, agilité, tests et mocks
Développeur o Java et Python (principalement)
2
@fbourbonnais
![Page 3: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/3.jpg)
Objectif de la présentation
3Image: jscreationzs / FreeDigitalPhotos.net
![Page 4: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/4.jpg)
Réchauffement…
Quelles sont vos attentes?
Qui fait ou a fait de l’AOP dans un projet?
En un mot: AOP?
Qui a eu une mauvaise expérience avec l’AOP?
4Image: Nutdanai Apikhomboonwaroot / FreeDigitalPhotos.net
![Page 5: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/5.jpg)
PRÉOCCUPATIONS TRANSVERSESLes
5
![Page 6: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/6.jpg)
Préoccupations transverses
6
Certaines préoccupations secondaires sont impossibles à regrouper et contaminent
plusieurs classes.
Angl.: Crosscutting concerns.
![Page 7: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/7.jpg)
Préoccupations transverses
Éparpillement
Enchevêtrement
7
![Page 8: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/8.jpg)
Préoccupations transverses
8
Enchevêtrement (cohésion)
Persistance
Fonctionnalité principale
Sécurité
Observation
![Page 9: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/9.jpg)
Enchevêtrement (1)
9
![Page 10: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/10.jpg)
Enchevêtrement (2)
10
![Page 11: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/11.jpg)
Enchevêtrement (3)
11
![Page 12: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/12.jpg)
Enchevêtrement (4)
12
![Page 13: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/13.jpg)
Enchevêtrement
(principale)
13
![Page 14: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/14.jpg)
Enchevêtrement
(récapitulatif)
14
![Page 15: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/15.jpg)
Préoccupations transverses
15
Éparpillement (dispersion)
Persistance
![Page 16: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/16.jpg)
L’AOPIntroduction à
16
![Page 17: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/17.jpg)
Orientation objet et préoccupations
Encapsulation
Modularité
CouplageSRP
Cohésion
17
![Page 18: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/18.jpg)
Orientation objet et préoccupations
18
Théoriquement, chaque classe devrait représenter une seule préoccupation.
![Page 19: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/19.jpg)
Orientation aspect
19
Aspect 1Classe 1
Aspect 2
Aspect 3
Classe 2
C
C
A
A
A
![Page 20: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/20.jpg)
LA TERMINOLOGIE ET DU FONCTIONNEMENT
Rappel rapide de
20
![Page 21: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/21.jpg)
Un aspect
Un module encapsulant une préoccupation
Peu gérer les préoccupations transverses
Généralement une classe « évoluée »o Capacités supplémentaires afin de permettre
l’encapsulation de préoccupations transverses
21
![Page 22: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/22.jpg)
Contenu typique d’un aspect
Code à exécuter
Indication des cibles Aspect
22
![Page 23: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/23.jpg)
Aspect en AspectJ
23
public aspect VisitorAspect {
/ ∗ −−−−−−−− Pointcuts −−−−−−−− / ∗
protected pointcut startMethod() :
execution( start (..) ); ∗ ∗
/ ∗ −−−−−−−− Advices −−−−−−−− / ∗
after() : startMethod() {
printHello();
}
}
![Page 24: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/24.jpg)
L’AOP N’A PAS AUTANT RAYONNÉ QUE PRÉVU?
Pourquoi est-ce que
24
![Page 25: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/25.jpg)
Pourquoi est-ce que plusieurs entreprises délaissent l’AOP?
Mauvaises raisons et utilisations
Complexité ajoutée
Manque de support et d’intégration
Manque de connaissances et de compétences
Trop de promesses
25
![Page 26: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/26.jpg)
Aspect != AOP
26Image: Danilo Rizzuti / FreeDigitalPhotos.net
![Page 27: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/27.jpg)
Enquête auprès de débutants (2009)
Pas plus difficile à apprendre que l’OO (74%)
Il est difficile de tester un aspect (100%)o N’avaient pas une grande expérience avec les tests.
Les tests sont simplifiés grâce à l’AOP (67%)
Plusieurs autres difficultés sont causées par un manque d’expérience
100% réutiliseraient l’AOP mais 62% avec prudence
27
[1] Félix-Antoine Bourbonnais and Luc Lamontagne, Using AOP for an Academic Agile Project: A Pilot Study, 1st International Workshop on Empirical Evaluation of Software Composition Techniques (ESCOT 2010), Rennes, France, 2010.
![Page 28: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/28.jpg)
Enquête auprès de débutants (2009)
Le contexteo Étudiants de bacc. (3e/4e année)o Projet de session (3 mois)o Portail financier web avec GWT ou Spring
Pour les autres données et le contexte détaillé:o Félix-Antoine Bourbonnais and Luc Lamontagne,
Using AOP for an Academic Agile Project: A Pilot StudyESCOT 2012, Renne, France, 20120.
o http://www.comp.lancs.ac.uk/~greenwop/escot10/escot10_submission_2.pdf
28
Critique de la validité
![Page 29: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/29.jpg)
INTRODUIRE DE L’AOP DANS VOTRE PROJET
Comment
29
![Page 30: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/30.jpg)
1. Avoir un but…
30Image: renjith krishnan / FreeDigitalPhotos.net
![Page 31: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/31.jpg)
2. Choisir sa technologie
31Image: Sura Nualpradid / FreeDigitalPhotos.net
![Page 32: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/32.jpg)
Choix technologiques
Tisseur / cadre applicatif (framework)o Compilateur spécialo Pur java
Mode de tissageo LTW (au chargement des classes)o CTW (à la compilation)
32
![Page 33: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/33.jpg)
Choix technologiques
Syntaxeo Javao AspectJ Language (.aj)o @AspectJo XML
Intégrationo Maveno AJDT
33
![Page 34: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/34.jpg)
3. Considérer la complexité ajoutée
Gains
Complexité
34
![Page 35: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/35.jpg)
4. Considérer l’intégration
Avec d’autres cadres applicatifs (framework)
Le système de déploiement
L’intégrateur continu
Les technologie de tests
Etc.
35Image: manostphoto / FreeDigitalPhotos.net
![Page 36: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/36.jpg)
5. S’assurer de maîtriser les concepts
36
Rappelez-vous que vous introduisez un nouveau paradigme et non pas simplement une
technologie « cool »!
Prototyper
Essayer sur un petit projet
Bien se documenter
Bien former son équipe
Image: renjith krishnan / FreeDigitalPhotos.net
![Page 37: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/37.jpg)
6. Se discipliner
Résistez au « canon pour tuer une mouche »
L’AO tourne généralement mal entre les mains de cowboys
Balancez toujours la complexité versus le gain
Tester!
37Image: photostock / FreeDigitalPhotos.net
![Page 38: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/38.jpg)
MAUVAISES PRATIQUESQuelques
Image: Ambro/ FreeDigitalPhotos.net 38
![Page 39: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/39.jpg)
Trop, c’est comme pas assez…
Quand 50% du code est composé d’aspects…
Est-ce 50% du code est composé de préoccupations transverses?
Image: farconville / FreeDigitalPhotos.net 39
![Page 40: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/40.jpg)
L’AOP n’est pas un pansement
Suis-je en train d’utiliser l’AOP pour corriger un problème de design?
Ne vous servez pas de l’AOP comme parfum afin de masquer les mauvaises odeurs…
Image: digitalart / FreeDigitalPhotos.net 40
![Page 41: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/41.jpg)
Le « trip techno »
41
L’AOP c’est trop COOL !!
La chute pourrait être douloureuse!
• « AspectJ... WOW trop cool ! »• « On peut bidouiller plein de trucs avec ca ! »• « Tsé le truc qu’on arrivait pas à faire... on va faire un aspect qui va
changer ca puis qui va décider si… »
YAGNI!
![Page 42: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/42.jpg)
BONNES PRATIQUESQuelques
42Image: photostock / FreeDigitalPhotos.net
![Page 43: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/43.jpg)
OO encore d’actualité
43
Ce qui était vrai en OO l’est encore en AO
![Page 44: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/44.jpg)
Conseils de base habituels
Code propre
Cohésion dans l’aspect
Couplage de l’aspect
44
![Page 45: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/45.jpg)
Un aspect? Vraiment?
45
Est-ce une préoccupation transverse?
Est-ce que je pourrais réusiner mon design OO pour atteindre le même objectif?
![Page 46: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/46.jpg)
Utiliser l’aspect comme « lien »
Déléguer à une classe qui contient la logique liée à cette préoccupation
Utiliser l’aspect pour tisser la logique
Note: Peut varier en fonction du tisseur (ex.: AspectJ)
46
pointcut inXorY() :
execution(* *(..))
&& within(X || Y);
after() : inXorY {
persistance.clearCache();
}
X(classe cible)
Y(classe cible)
Aspect
Persistance(classe à tisser)
![Page 47: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/47.jpg)
Dépendances et couplage
N’oubliez pas que l’aspect est couplé à toutes les classes où il s’injecte*.
* Où un point de coupure apparie
Image: Salvatore Vuono / FreeDigitalPhotos.net 47
![Page 48: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/48.jpg)
Précision du point de coupure
Un PC précis est plus à risque d’être impacté par un changement
Un PC très générique risque d’apparier trop de PJ
On appelle cela le « Fragile Pointcut Problem » [1]
49
pointcut pcPrecis() : execution(void C.doX());
pointcut pcGenerique() : execution(* C.doX*(..));
pointcut pcPourEtreCertainAvoirProbleme : execution(* *(..));
- Si C.doX() est renommé pour C.doXInContext() …
- Si on ajoute C.doXPasRapportAvecAspect() …
[1] C. Koppen et M. Störzer. PCDiff : attacking the fragile pointcut problem. In European Interactive Workshop on Aspects in Software (EIWAS), 2004.
![Page 49: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/49.jpg)
Conscience ou inconscience?
50
Est-ce que les classes tissées devraient avoir conscience ou non des aspects?
Débat ouvert « obliviousness » vs « awareness »
![Page 50: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/50.jpg)
TESTS D’ASPECTSBonnes pratiques de
51
![Page 51: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/51.jpg)
Tests de haut niveau
52
Les aspects contribuent aux fonctionnalités globales du système
Rien ne change pour les tests de haut niveau(fonctionnels, acceptation, etc.)
![Page 52: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/52.jpg)
Tests unitaires
53
![Page 53: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/53.jpg)
Tester unitairement un aspect
La bonne chose(advice)
Au bon moment(pointcut)
Test unitaire d’aspect
54
![Page 54: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/54.jpg)
Technique du pot de miel
55
Aspect
Pot 1
Pot 2
Pot N
XUTest
1
2
3
![Page 55: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/55.jpg)
56
![Page 56: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/56.jpg)
Encore faim?
Image: rajcreationzs / FreeDigitalPhotos.ne 57
Téléchargez les diapositives complètes sur developpementagile.com
https://joind.in/6005
![Page 57: Implanter l'AOP... Comment partir du bon pied?](https://reader034.vdocuments.site/reader034/viewer/2022042813/549c026ab479599b318b4602/html5/thumbnails/57.jpg)
QUESTIONSPériode de
58