AOP en .NET

3,248
-1

Published on

La Programmation Orientée Aspect en .NET.

Published in: Technology
1 Comment
2 Likes
Statistics
Notes
  • it's a goood representation
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
3,248
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
99
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

AOP en .NET

  1. 1. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  2. 2. Qui a déjà entendu parler de l’AOP ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  3. 3. Qui a déjà au moins joué un peu avec l’AOP ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  4. 4. Qui a déjà utilisé l’AOP dans des projets ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  5. 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. 6. Qui veut prendre ma place ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  7. 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. 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
  9. 9. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  10. 10. Machine-level code Structural programming Procedural programming Modular programming Object Oriented Programming ALT.NET Paris - Juin Romain Verdier http://codingly.com
  11. 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
  12. 12. O RLY? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  13. 13. Separation of Concerns (SoC) Single Responsability Principle (SRP) ALT.NET Paris - Juin Romain Verdier http://codingly.com
  14. 14. L’OOP ne permet pas toujours d’isoler certains « concerns » ALT.NET Paris - Juin Romain Verdier http://codingly.com
  15. 15. Cross Cutting Concerns « Considérations Entrecroisées » ou « Préoccupations Transversales ». Haha. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  16. 16. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  17. 17. Méthode Code métier Transactions Logging ALT.NET Paris - Juin Romain Verdier http://codingly.com
  18. 18. Peut-on faire mieux ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  19. 19. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  20. 20. Plein de trucs. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  21. 21. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  22. 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. 23. Le but : ALT.NET Paris - Juin Romain Verdier http://codingly.com
  24. 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. 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. 26. L’AOP est donc un complément à l’OOP. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  27. 27. En AOP, comment définir un aspect ? What ? Where ? When ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  28. 28. Aspect = Advice(s) + Pointcut(s) ALT.NET Paris - Juin Romain Verdier http://codingly.com
  29. 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. 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. 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
  32. 32. (Vous l’attendiez, hein ?) ALT.NET Paris - Juin Romain Verdier http://codingly.com
  33. 33. Identifier le cross cutting concern. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  34. 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. 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. 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. 37. … choisir où appliquer les greffons ? Justement, comment les appliquer ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  38. 38. Méthode Code métier Logging Transactions OOP OOP + AOP ALT.NET Paris - Juin Romain Verdier http://codingly.com
  39. 39. Code métier Aspects Logging Pointcuts Transactions OOP + AOP ALT.NET Paris - Juin Romain Verdier http://codingly.com
  40. 40. Il va falloir tisser. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  41. 41. Hourra ! Code métier Aspects Logging Pointcuts Transactions Tisseur OOP + AOP ALT.NET Paris - Juin Romain Verdier http://codingly.com
  42. 42. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  43. 43. Non, il y a un truc. Différentes techniques de tissage. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  44. 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. 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. 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. 47. 1 2 3 4 Fichier de configuration/définition. TXT, XML, DSL, etc. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  48. 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. 49. Revenons au tissage Aux techniques de tissage ALT.NET Paris - Juin Romain Verdier http://codingly.com
  50. 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. 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. 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. 53. 1 2 3 Avoir son propre compilateur. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  54. 54. 1 2 3 Modifier le code source. Pré-compilation ALT.NET Paris - Juin Romain Verdier http://codingly.com
  55. 55. 1 2 3 Modifier le bytecode. CIL, Java bytecode ALT.NET Paris - Juin Romain Verdier http://codingly.com
  56. 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. 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. 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. 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. 60. 1 2 3 Sciences occultes : Profiling API, Debugging API ALT.NET Paris - Juin Romain Verdier http://codingly.com
  61. 61. (Tissage 1 2 3 Hybride) Deux autres catégories. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  62. 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. 63. 1 2 3 Instrumentation statique (Join points) + Injection dynamique (Advices) ALT.NET Paris - Juin Romain Verdier http://codingly.com
  64. 64. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  65. 65. Une myriade* d’outils. * 10 000 ALT.NET Paris - Juin Romain Verdier http://codingly.com
  66. 66. Mais peu* sont vivants, matures, utilisables, utilisés, etc. *3<n<6 ALT.NET Paris - Juin Romain Verdier http://codingly.com
  67. 67. Cependant, l’AOP n’est pas, ou plus, un fantasme en .NET. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  68. 68. Pour commencer : l’interception dynamique. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  69. 69. Attention, l’interception, ce n’est pas vraiment de l’AOP. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  70. 70. Avant : Client Service Après : J’fais ce que je veux. Client Proxy Service ALT.NET Paris - Juin Romain Verdier http://codingly.com
  71. 71. Proxies .NET Remoting • RealProxy, TransparentProxy • MarshalByRefObject, ContextBoundObject • Contraignant • Lourd, performances • BCL • (Policy Injection Application Block) ALT.NET Paris - Juin Romain Verdier http://codingly.com
  72. 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. 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. 74. IoC + Interception = AOP ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  75. 75. Spring.NET • Conteneur IoC • Spring.Aop • Interception dynamique • Assez riche • Mature • System.Reflection.Emit ALT.NET Paris - Juin Romain Verdier http://codingly.com
  76. 76. Tissage Statique ALT.NET Paris - Juin Romain Verdier http://codingly.com
  77. 77. Linfu.AOP • Tissage Hybride • Simple • Utilise Mono.Cecil • Jeune • Supporte mal le debug ALT.NET Paris - Juin Romain Verdier http://codingly.com
  78. 78. PostSharp (PostSharp.Laos) • Plateforme complète • Full static weaving • Supporte le Load-time weaving • Très riche, mature • Plutôt « easy » • (Commercial) ALT.NET Paris - Juin Romain Verdier http://codingly.com
  79. 79. Mais encore : ALT.NET Paris - Juin Romain Verdier http://codingly.com
  80. 80. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  81. 81. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  82. 82. code; Interception dynamique • Real/Transparent Proxy • Castle.DynamicProxy • Linfu.DynamicProxy ALT.NET Paris - Juin Romain Verdier http://codingly.com
  83. 83. code; Tissage statique • PostSharp.Laos • Linfu.AOP ALT.NET Paris - Juin Romain Verdier http://codingly.com
  84. 84. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  85. 85. code; Conteneurs IoC & Interception • Spring.NET • (Castle.Windsor) • (Etc.) ALT.NET Paris - Juin Romain Verdier http://codingly.com
  86. 86. code; A la main ? • System.Reflection.Emit • Mono.Cecil ALT.NET Paris - Juin Romain Verdier http://codingly.com
  87. 87. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  88. 88. Pas de conclusion. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  89. 89. Pour mieux débattre ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  90. 90. France http://www.altnetfr.org http://groups.google.com/group/parisaltnet ALT.NET Paris - Juin Romain Verdier http://codingly.com
  91. 91. Photos http://www.flickr.com/photos/kaztor/2974815584/ http://www.flickr.com/photos/fdecomite/1655939589/ http://www.flickr.com/photos/mytripsmypics/551019306/ http://www.flickr.com/photos/st3f4n/143623934/ http://www.flickr.com/photos/artsyscience/51311029/ http://www.flickr.com/photos/wonderlane/298818505/ http://www.flickr.com/photos/juliaanderson/2769018395/ http://www.flickr.com/photos/putupyourdukes/3583539544/ http://www.flickr.com/photos/jokofoto/809920021/ http://www.flickr.com/photos/freakdiver/1390893431/ http://www.flickr.com/photos/strelitzia/259744405/ http://www.flickr.com/photos/shoves/427382857/ http://www.flickr.com/photos/isimmer/1033139937/ http://www.flickr.com/photos/jbevain/314035471/ http://www.flickr.com/photos/lamiacucina/3608223128/ http://imgur.com/fhxDb.jpg ALT.NET Paris - Juin Romain Verdier http://codingly.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×