2. Qui a déjà entendu parler de l’AOP ?
ALT.NET Paris - Juin Romain Verdier http://codingly.com
3. Qui a déjà au moins joué un peu
avec l’AOP ?
ALT.NET Paris - Juin Romain Verdier http://codingly.com
4. Qui a déjà utilisé l’AOP dans
des projets ?
ALT.NET Paris - Juin Romain Verdier http://codingly.com
5. Qui a une idée vague de ce que
sont les principes et les
mécanismes de l’AOP ?
ALT.NET Paris - Juin Romain Verdier http://codingly.com
6. Qui veut prendre ma place ?
ALT.NET Paris - Juin Romain Verdier http://codingly.com
7. Romain Verdier
http://codingly.com
http://twitter.com/romainverdier
Consultant FastConnect
http://fastconnect.fr
http://blog.fastconnect.fr
ALT.NET Paris - Juin Romain Verdier http://codingly.com
8. 1. Le problème
Ou pourquoi nous aurions besoin de l’AOP
2. L’AOP, mais qu’est-ce ?
Introduction : le principe de l’AOP
3. C’est magique ou quoi ?
Démystification de l’AOP, les techniques, les méthodes
4. Et donc, en .NET ?
Les outils qui existent et qui sont utilisés
5. Bullshit !
Un exemple, peut-être ?
ALT.NET Paris - Juin Romain Verdier http://codingly.com
10. Machine-level code
Structural programming
Procedural programming
Modular programming
Object Oriented Programming
ALT.NET Paris - Juin Romain Verdier http://codingly.com
11. L’OOP permet aujourd’hui d’atteindre
un bon niveau d’abstraction, et
autorise une modularité assez fine.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
22. On retiendra surtout :
Aspect Oriented Programming
On parle aussi d’AOSD : Aspect Oriented Software Developement.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
23. Le but :
ALT.NET Paris - Juin Romain Verdier http://codingly.com
24. (Eliminer les spaghettis !)
Permettre l’isolation des Cross
Cutting Concerns, ces aspects
transverses qu’il est impossible de
factoriser convenablement grâce à
l’OOP.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
25. Oui, mais comment ?
En mettant la notion d’aspect
transverse au premier plan, et en
offrant un complément à l’OOP.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
26. L’AOP est donc un complément
à l’OOP.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
27. En AOP, comment définir un
aspect ?
What ? Where ? When ?
ALT.NET Paris - Juin Romain Verdier http://codingly.com
28. Aspect = Advice(s) + Pointcut(s)
ALT.NET Paris - Juin Romain Verdier http://codingly.com
29. Advice (Greffon)
Pièce de code constituant tout
ou une partie de la logique de
l’aspect.
What.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
30. Pointcut (Point d’action)
Point de branchement, endroit
du programme où placer une
greffe. Il s’agit forcément d’un
point de jonction.
Where. (When.)
ALT.NET Paris - Juin Romain Verdier http://codingly.com
31. Joinpoint (Point de jonction)
Point valide de branchement
dans le programme. Il y en a de
différents types.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
33. Identifier le cross cutting concern.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
34. Ecrire l’aspect.
Ici, un seul greffon qui pourrait
ressembler à quelque chose comme ça :
ALT.NET Paris - Juin Romain Verdier http://codingly.com
35. Choisir les points d’action.
Pointcut = « A l’entrée de chaque méthode »
ALT.NET Paris - Juin Romain Verdier http://codingly.com
36. En résumé, l’AOP consiste à :
• Identifier les « cross cutting concerns »
• Ecrire un ou plusieurs greffons – les advices – qui
représentent l’aspect et qui permettent
d’encapsuler la « préoccupation transverse ».
• Choisir où appliquer ces greffons – les pointcuts…
ALT.NET Paris - Juin Romain Verdier http://codingly.com
37. … choisir où appliquer les greffons ?
Justement, comment les
appliquer ?
ALT.NET Paris - Juin Romain Verdier http://codingly.com
38. Méthode
Code métier Logging
Transactions
OOP OOP + AOP
ALT.NET Paris - Juin Romain Verdier http://codingly.com
39. Code métier
Aspects
Logging
Pointcuts
Transactions
OOP + AOP
ALT.NET Paris - Juin Romain Verdier http://codingly.com
40. Il va falloir tisser.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
41. Hourra !
Code métier
Aspects
Logging
Pointcuts
Transactions Tisseur
OOP + AOP
ALT.NET Paris - Juin Romain Verdier http://codingly.com
43. Non, il y a un truc.
Différentes techniques de tissage.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
44. Mais avant tout, il faut un
moyen de décrire les aspects :
greffons et points d’action.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
45. 1 2 3 4
Un nouveau langage de
programmation, une surcouche
ou une extension à un langage
existant.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
46. 1 2 3 4
Utilisation d’attributs, ou
d’annotations : profiter du
support des métadonnées d’un
langage.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
47. 1 2 3 4
Fichier de
configuration/définition. TXT,
XML, DSL, etc.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
48. 1 2 3 4
API classique. Définir comment
appliquer les aspects par code.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
49. Revenons au tissage
Aux techniques de tissage
ALT.NET Paris - Juin Romain Verdier http://codingly.com
50. Tissage (Weaving) :
Insertion des greffons dans le
programme à instrumenter, aux
points d’action définis.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
51. 2 ½ types de tissage
• Tissage statique
Compile-time weaving
• Tissage dynamique
Runtime weaving
• (Tissage hybride)
Compile-time + Runtime weaving
ALT.NET Paris - Juin Romain Verdier http://codingly.com
52. 1 2 3
Tissage statique.
Le tissage à lieu avant la compilation,
durant la compilation, ou juste après
la compilation.
Mais avant l’exécution du programme.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
53. 1 2 3
Avoir son propre compilateur.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
54. 1 2 3
Modifier le code source.
Pré-compilation
ALT.NET Paris - Juin Romain Verdier http://codingly.com
55. 1 2 3
Modifier le bytecode.
CIL, Java bytecode
ALT.NET Paris - Juin Romain Verdier http://codingly.com
56. 1 2 3
Tissage dynamique.
Le tissage à lieu durant l’exécution
du programme.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
57. 1 2 3
Les techniques dépendent fortement de
la plateforme.
Aujourd’hui, c’est .NET.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
58. 1 2 3
Utiliser l’infrastructure de .NET Remoting
RealProxy, TransparentProxy, MarshalByRefObjec
t, ContextBoundObject
ALT.NET Paris - Juin Romain Verdier http://codingly.com
59. 1 2 3
Génération dynamique de types à la volée.
(Proxying)
Proxies via SRE
ALT.NET Paris - Juin Romain Verdier http://codingly.com
60. 1 2 3
Sciences occultes : Profiling API,
Debugging API
ALT.NET Paris - Juin Romain Verdier http://codingly.com
61. (Tissage 1 2 3
Hybride)
Deux autres catégories.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
62. 1 2 3
Tissage statique au chargement: Le
tissage sur le bytecode a lieu juste
avant le chargement de l’assembly.
ALT.NET Paris - Juin Romain Verdier http://codingly.com
63. 1 2 3
Instrumentation statique
(Join points)
+
Injection dynamique
(Advices)
ALT.NET Paris - Juin Romain Verdier http://codingly.com
72. Castle.DynamicProxy
• System.Reflection.Emit
• Très mature, très utilisé
• Simple
• (Castle.Windsor)
ALT.NET Paris - Juin Romain Verdier http://codingly.com
73. Linfu.DynamicProxy
• System.Reflection.Emit
• Lightweight
• Performant
• A la mode, commence à remplacer Castle.DP2
• Simple
ALT.NET Paris - Juin Romain Verdier http://codingly.com
74. IoC + Interception = AOP ?
ALT.NET Paris - Juin Romain Verdier http://codingly.com
75. Spring.NET
• Conteneur IoC
• Spring.Aop
• Interception dynamique
• Assez riche
• Mature
• System.Reflection.Emit
ALT.NET Paris - Juin Romain Verdier http://codingly.com