AOP en .NET
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

AOP en .NET

on

  • 4,595 views

La Programmation Orientée Aspect en .NET.

La Programmation Orientée Aspect en .NET.

Statistics

Views

Total Views
4,595
Views on SlideShare
3,679
Embed Views
916

Actions

Likes
2
Downloads
90
Comments
1

13 Embeds 916

http://codingly.com 486
http://www.altnetfr.org 276
http://feeds.feedburner.com 112
http://www.linkedin.com 12
http://www.slideshare.net 9
http://feedly.com 6
https://www.linkedin.com 4
http://www.netvibes.com 3
http://www.newsblur.com 3
http://www.aidegratuit.com 2
http://cloud.feedly.com 1
http://www.yatedo.fr 1
https://twitter.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • it's a goood representation
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

AOP en .NET Presentation 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