Your SlideShare is downloading. ×
AOP en .NET
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

AOP en .NET

3,082
views

Published on

La Programmation Orientée Aspect en .NET.

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,082
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
96
Comments
1
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 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
  • 9. 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
  • 12. O RLY? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 13. Separation of Concerns (SoC) Single Responsability Principle (SRP) ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 14. L’OOP ne permet pas toujours d’isoler certains « concerns » ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 15. Cross Cutting Concerns « Considérations Entrecroisées » ou « Préoccupations Transversales ». Haha. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 16. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 17. Méthode Code métier Transactions Logging ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 18. Peut-on faire mieux ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 19. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 20. Plein de trucs. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 21. 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
  • 32. (Vous l’attendiez, hein ?) 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
  • 42. 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
  • 64. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 65. Une myriade* d’outils. * 10 000 ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 66. Mais peu* sont vivants, matures, utilisables, utilisés, etc. *3<n<6 ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 67. Cependant, l’AOP n’est pas, ou plus, un fantasme en .NET. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 68. Pour commencer : l’interception dynamique. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 69. Attention, l’interception, ce n’est pas vraiment de l’AOP. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 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. 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. 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
  • 76. Tissage Statique ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 77. Linfu.AOP • Tissage Hybride • Simple • Utilise Mono.Cecil • Jeune • Supporte mal le debug ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 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. Mais encore : ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 80. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 81. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 82. code; Interception dynamique • Real/Transparent Proxy • Castle.DynamicProxy • Linfu.DynamicProxy ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 83. code; Tissage statique • PostSharp.Laos • Linfu.AOP ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 84. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 85. code; Conteneurs IoC & Interception • Spring.NET • (Castle.Windsor) • (Etc.) ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 86. code; A la main ? • System.Reflection.Emit • Mono.Cecil ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 87. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 88. Pas de conclusion. ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 89. Pour mieux débattre ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 90. France http://www.altnetfr.org http://groups.google.com/group/parisaltnet ALT.NET Paris - Juin Romain Verdier http://codingly.com
  • 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