• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
AOP en .NET
 

AOP en .NET

on

  • 4,486 views

La Programmation Orientée Aspect en .NET.

La Programmation Orientée Aspect en .NET.

Statistics

Views

Total Views
4,486
Views on SlideShare
3,580
Embed Views
906

Actions

Likes
2
Downloads
89
Comments
1

13 Embeds 906

http://codingly.com 483
http://www.altnetfr.org 276
http://feeds.feedburner.com 106
http://www.linkedin.com 12
http://www.slideshare.net 9
http://feedly.com 5
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

11 of 1 previous next

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

    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Qui a déjà entendu parler de l’AOP ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Qui a déjà au moins joué un peu avec l’AOP ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Qui a déjà utilisé l’AOP dans des projets ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • Qui veut prendre ma place ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • 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
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Machine-level code Structural programming Procedural programming Modular programming Object Oriented Programming ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • O RLY? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Separation of Concerns (SoC) Single Responsability Principle (SRP) ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • L’OOP ne permet pas toujours d’isoler certains « concerns » ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Cross Cutting Concerns « Considérations Entrecroisées » ou « Préoccupations Transversales ». Haha. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Méthode Code métier Transactions Logging ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Peut-on faire mieux ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Plein de trucs. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • On retiendra surtout : Aspect Oriented Programming On parle aussi d’AOSD : Aspect Oriented Software Developement. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Le but : ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • (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
    • 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
    • L’AOP est donc un complément à l’OOP. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • En AOP, comment définir un aspect ? What ? Where ? When ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Aspect = Advice(s) + Pointcut(s) ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • 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
    • 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
    • (Vous l’attendiez, hein ?) ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Identifier le cross cutting concern. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Ecrire l’aspect. Ici, un seul greffon qui pourrait ressembler à quelque chose comme ça : ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Choisir les points d’action. Pointcut = « A l’entrée de chaque méthode » ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • … choisir où appliquer les greffons ? Justement, comment les appliquer ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Méthode Code métier Logging Transactions OOP OOP + AOP ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Code métier Aspects Logging Pointcuts Transactions OOP + AOP ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Il va falloir tisser. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Hourra ! Code métier Aspects Logging Pointcuts Transactions Tisseur OOP + AOP ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Non, il y a un truc. Différentes techniques de tissage. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • 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
    • 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
    • 1 2 3 4 Fichier de configuration/définition. TXT, XML, DSL, etc. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 1 2 3 4 API classique. Définir comment appliquer les aspects par code. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Revenons au tissage Aux techniques de tissage ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Tissage (Weaving) : Insertion des greffons dans le programme à instrumenter, aux points d’action définis. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • 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
    • 1 2 3 Avoir son propre compilateur. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 1 2 3 Modifier le code source. Pré-compilation ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 1 2 3 Modifier le bytecode. CIL, Java bytecode ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 1 2 3 Tissage dynamique. Le tissage à lieu durant l’exécution du programme. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • 1 2 3 Utiliser l’infrastructure de .NET Remoting RealProxy, TransparentProxy, MarshalByRefObjec t, ContextBoundObject ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • 1 2 3 Sciences occultes : Profiling API, Debugging API ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • (Tissage 1 2 3 Hybride) Deux autres catégories. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • 1 2 3 Instrumentation statique (Join points) + Injection dynamique (Advices) ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Une myriade* d’outils. * 10 000 ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Mais peu* sont vivants, matures, utilisables, utilisés, etc. *3<n<6 ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Cependant, l’AOP n’est pas, ou plus, un fantasme en .NET. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Pour commencer : l’interception dynamique. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Attention, l’interception, ce n’est pas vraiment de l’AOP. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Avant : Client Service Après : J’fais ce que je veux. Client Proxy Service ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Proxies .NET Remoting • RealProxy, TransparentProxy • MarshalByRefObject, ContextBoundObject • Contraignant • Lourd, performances • BCL • (Policy Injection Application Block) ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Castle.DynamicProxy • System.Reflection.Emit • Très mature, très utilisé • Simple • (Castle.Windsor) ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Linfu.DynamicProxy • System.Reflection.Emit • Lightweight • Performant • A la mode, commence à remplacer Castle.DP2 • Simple ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • IoC + Interception = AOP ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Spring.NET • Conteneur IoC • Spring.Aop • Interception dynamique • Assez riche • Mature • System.Reflection.Emit ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Tissage Statique ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Linfu.AOP • Tissage Hybride • Simple • Utilise Mono.Cecil • Jeune • Supporte mal le debug ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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
    • Mais encore : ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • code; Interception dynamique • Real/Transparent Proxy • Castle.DynamicProxy • Linfu.DynamicProxy ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • code; Tissage statique • PostSharp.Laos • Linfu.AOP ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • code; Conteneurs IoC & Interception • Spring.NET • (Castle.Windsor) • (Etc.) ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • code; A la main ? • System.Reflection.Emit • Mono.Cecil ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Pas de conclusion. ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • Pour mieux débattre ? ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • France http://www.altnetfr.org http://groups.google.com/group/parisaltnet ALT.NET Paris - Juin Romain Verdier http://codingly.com
    • 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