SlideShare ist ein Scribd-Unternehmen logo
1 von 91
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

Weitere ähnliche Inhalte

Ähnlich wie AOP en .NET

Qq139 g formation-ibm-rational-rhapsody-developpement-de-logiciels-embarques-...
Qq139 g formation-ibm-rational-rhapsody-developpement-de-logiciels-embarques-...Qq139 g formation-ibm-rational-rhapsody-developpement-de-logiciels-embarques-...
Qq139 g formation-ibm-rational-rhapsody-developpement-de-logiciels-embarques-...CERTyou Formation
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation MavenArnaud Héritier
 
Symfi formation-symfony-les-bases
Symfi formation-symfony-les-basesSymfi formation-symfony-les-bases
Symfi formation-symfony-les-basesCERTyou Formation
 
API-First pour de nouvelles expériences de commerce en ligne
API-First pour de nouvelles expériences de commerce en ligneAPI-First pour de nouvelles expériences de commerce en ligne
API-First pour de nouvelles expériences de commerce en lignePrénom Nom de famille
 
Barcamp tunisie edition 2010 langage de programmation php
Barcamp tunisie edition 2010 langage de programmation php Barcamp tunisie edition 2010 langage de programmation php
Barcamp tunisie edition 2010 langage de programmation php Barcamp Tunisie
 
Qq001 g formation-introduction-a-ibm-rational-rhapsody
Qq001 g formation-introduction-a-ibm-rational-rhapsodyQq001 g formation-introduction-a-ibm-rational-rhapsody
Qq001 g formation-introduction-a-ibm-rational-rhapsodyCERTyou Formation
 
Keynote .NET 2015 : une nouvelle ère
Keynote .NET 2015 : une nouvelle èreKeynote .NET 2015 : une nouvelle ère
Keynote .NET 2015 : une nouvelle èreMicrosoft
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Normandie Web Xperts
 
CV Julien Verney LeadDev
CV Julien Verney LeadDevCV Julien Verney LeadDev
CV Julien Verney LeadDevJulien VERNEY
 
Talk Red Hat Entreprise Numerique - Eip Designer - 20160323
Talk Red Hat Entreprise Numerique - Eip Designer - 20160323Talk Red Hat Entreprise Numerique - Eip Designer - 20160323
Talk Red Hat Entreprise Numerique - Eip Designer - 20160323Laurent Broudoux
 
Revues de code forum php
Revues de code forum phpRevues de code forum php
Revues de code forum phpALTER WAY
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureJonathan Bonzy
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureMarc Nazarian
 

Ähnlich wie AOP en .NET (20)

Qq139 g formation-ibm-rational-rhapsody-developpement-de-logiciels-embarques-...
Qq139 g formation-ibm-rational-rhapsody-developpement-de-logiciels-embarques-...Qq139 g formation-ibm-rational-rhapsody-developpement-de-logiciels-embarques-...
Qq139 g formation-ibm-rational-rhapsody-developpement-de-logiciels-embarques-...
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
[FR] Papier Cetsis 2014 - PLC Checker
[FR] Papier Cetsis 2014 - PLC Checker[FR] Papier Cetsis 2014 - PLC Checker
[FR] Papier Cetsis 2014 - PLC Checker
 
Linq Tech Days08 Lux
Linq Tech Days08 LuxLinq Tech Days08 Lux
Linq Tech Days08 Lux
 
CMS
CMSCMS
CMS
 
Symfi formation-symfony-les-bases
Symfi formation-symfony-les-basesSymfi formation-symfony-les-bases
Symfi formation-symfony-les-bases
 
API-First pour de nouvelles expériences de commerce en ligne
API-First pour de nouvelles expériences de commerce en ligneAPI-First pour de nouvelles expériences de commerce en ligne
API-First pour de nouvelles expériences de commerce en ligne
 
Barcamp tunisie edition 2010 langage de programmation php
Barcamp tunisie edition 2010 langage de programmation php Barcamp tunisie edition 2010 langage de programmation php
Barcamp tunisie edition 2010 langage de programmation php
 
Qq001 g formation-introduction-a-ibm-rational-rhapsody
Qq001 g formation-introduction-a-ibm-rational-rhapsodyQq001 g formation-introduction-a-ibm-rational-rhapsody
Qq001 g formation-introduction-a-ibm-rational-rhapsody
 
Keynote .NET 2015 : une nouvelle ère
Keynote .NET 2015 : une nouvelle èreKeynote .NET 2015 : une nouvelle ère
Keynote .NET 2015 : une nouvelle ère
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
 
CV Julien Verney LeadDev
CV Julien Verney LeadDevCV Julien Verney LeadDev
CV Julien Verney LeadDev
 
Talk Red Hat Entreprise Numerique - Eip Designer - 20160323
Talk Red Hat Entreprise Numerique - Eip Designer - 20160323Talk Red Hat Entreprise Numerique - Eip Designer - 20160323
Talk Red Hat Entreprise Numerique - Eip Designer - 20160323
 
Revues de code forum php
Revues de code forum phpRevues de code forum php
Revues de code forum php
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
4D Summit2013 refactoring
4D Summit2013 refactoring4D Summit2013 refactoring
4D Summit2013 refactoring
 
Vue Introduction
Vue IntroductionVue Introduction
Vue Introduction
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 

AOP en .NET

  • 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