aop en .net

Post on 25-Jun-2015

3.157 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

La Programmation Orientée Aspect en .NET.

TRANSCRIPT

AOP en .NET

Romain Verdier http://codingly.comALT.NET Paris - Juin

Qui a déjà entendu parler de l’AOP ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Qui a déjà au moins joué un peu avec l’AOP ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Qui a déjà utilisé l’AOP dans des projets ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Qui a une idée vague de ce que sont les principes et les mécanismes de l’AOP ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Qui veut prendre ma place ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdierhttp://codingly.comhttp://twitter.com/romainverdier

Romain Verdier http://codingly.comALT.NET Paris - Juin

Consultant FastConnecthttp://fastconnect.frhttp://blog.fastconnect.fr

1. Le problèmeOu 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 ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

1. Le problème

Romain Verdier http://codingly.comALT.NET Paris - Juin

Machine-level codeStructural programming

Procedural programmingModular programming

Object Oriented Programming

Romain Verdier http://codingly.comALT.NET Paris - Juin

L’OOP permet aujourd’hui d’atteindre un bon niveau d’abstraction, et

autorise une modularité assez fine.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdier http://codingly.comALT.NET Paris - Juin

O RLY?

Separation of Concerns(SoC)

Romain Verdier http://codingly.comALT.NET Paris - Juin

Single Responsability Principle(SRP)

L’OOP ne permet pas toujours d’isoler certains « concerns »

Romain Verdier http://codingly.comALT.NET Paris - Juin

Cross Cutting Concerns

Romain Verdier http://codingly.comALT.NET Paris - Juin

« Considérations Entrecroisées » ou « Préoccupations Transversales ». Haha.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdier http://codingly.comALT.NET Paris - Juin

Code métier

Transactions

Logging

Méthode

Romain Verdier http://codingly.comALT.NET Paris - Juin

Peut-on faire mieux ?

2. L’AOP, mais qu’est-ce ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Plein de trucs.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdier http://codingly.comALT.NET Paris - Juin

On retiendra surtout :

Romain Verdier http://codingly.comALT.NET Paris - Juin

Aspect Oriented Programming

On parle aussi d’AOSD : Aspect Oriented Software Developement.

Le but :

Romain Verdier http://codingly.comALT.NET Paris - Juin

(Eliminer les spaghettis !)

Romain Verdier http://codingly.comALT.NET Paris - Juin

Permettre l’isolation des Cross Cutting Concerns, ces aspects

transverses qu’il est impossible de factoriser convenablement grâce à

l’OOP.

Oui, mais comment ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

En mettant la notion d’aspect transverse au premier plan, et en offrant un complément à l’OOP.

Romain Verdier http://codingly.comALT.NET Paris - Juin

L’AOP est donc un complément à l’OOP.

Romain Verdier http://codingly.comALT.NET Paris - Juin

What ? Where ? When ?

En AOP, comment définir un aspect ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Aspect = Advice(s) + Pointcut(s)

Romain Verdier http://codingly.comALT.NET Paris - Juin

Advice (Greffon)

What.

Pièce de code constituant tout ou une partie de la logique de

l’aspect.

Romain Verdier http://codingly.comALT.NET Paris - Juin

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.)

Romain Verdier http://codingly.comALT.NET Paris - Juin

Joinpoint (Point de jonction)

Point valide de branchement dans le programme. Il y en a de

différents types.

Romain Verdier http://codingly.comALT.NET Paris - Juin

(Vous l’attendiez, hein ?)

Romain Verdier http://codingly.comALT.NET Paris - Juin

Identifier le cross cutting concern.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Ecrire l’aspect.

Ici, un seul greffon qui pourrait ressembler à quelque chose comme ça :

Romain Verdier http://codingly.comALT.NET Paris - Juin

Choisir les points d’action.

Pointcut = « A l’entrée de chaque méthode »

En résumé, l’AOP consiste à :

Romain Verdier http://codingly.comALT.NET Paris - Juin

• 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…

… choisir où appliquer les greffons ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Justement, comment les appliquer ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

MéthodeCode métier

Transactions

Logging

OOP OOP + AOP

VS

Romain Verdier http://codingly.comALT.NET Paris - Juin

Logging

Transactions

Code métier

Aspects

OOP + AOP

Pointcuts ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Il va falloir tisser.

Tisseur

Hourra !

Romain Verdier http://codingly.comALT.NET Paris - Juin

Logging

Transactions

Code métier

Aspects

OOP + AOP

Pointcuts

3. C’est magique ou quoi ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Non, il y a un truc.

Différentes techniques de tissage.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Mais avant tout, il faut un moyen de décrire les aspects :

greffons et points d’action.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdier http://codingly.comALT.NET Paris - Juin

Un nouveau langage de programmation, une surcouche ou une extension à un langage

existant.

1 2 3 4

Romain Verdier http://codingly.comALT.NET Paris - Juin

Utilisation d’attributs, ou d’annotations : profiter du

support des métadonnées d’un langage.

21 3 4

Romain Verdier http://codingly.comALT.NET Paris - Juin

Fichier de configuration/définition. TXT,

XML, DSL, etc.

321 4

Romain Verdier http://codingly.comALT.NET Paris - Juin

API classique. Définir comment appliquer les aspects par code.

42 31

Romain Verdier http://codingly.comALT.NET Paris - Juin

Revenons au tissage

Aux techniques de tissage

Romain Verdier http://codingly.comALT.NET Paris - Juin

Tissage (Weaving) :

Insertion des greffons dans le programme à instrumenter, aux

points d’action définis.

Romain Verdier http://codingly.comALT.NET Paris - Juin

2 ½ types de tissage• Tissage statique

Compile-time weaving

• Tissage dynamiqueRuntime weaving

• (Tissage hybride)Compile-time + Runtime weaving

Romain Verdier http://codingly.comALT.NET Paris - Juin

Tissage statique.

Le tissage à lieu avant la compilation, durant la compilation, ou juste après la

compilation.

Mais avant l’exécution du programme.

1 2 3

Romain Verdier http://codingly.comALT.NET Paris - Juin

Avoir son propre compilateur.

1 2 3

Romain Verdier http://codingly.comALT.NET Paris - Juin

Modifier le code source.

1 2 3

Pré-compilation

Romain Verdier http://codingly.comALT.NET Paris - Juin

Modifier le bytecode.

CIL, Java bytecode

1 2 3

Romain Verdier http://codingly.comALT.NET Paris - Juin

Tissage dynamique.

Le tissage à lieu durant l’exécution du programme.

21 3

Romain Verdier http://codingly.comALT.NET Paris - Juin

Les techniques dépendent fortement de la plateforme.

Aujourd’hui, c’est .NET.

21 3

Romain Verdier http://codingly.comALT.NET Paris - Juin

Utiliser l’infrastructure de .NET Remoting

RealProxy, TransparentProxy, MarshalByRefObject, ContextBoundObject

21 3

Romain Verdier http://codingly.comALT.NET Paris - Juin

Génération dynamique de types à la volée. (Proxying)

Proxies via SRE

21 3

Romain Verdier http://codingly.comALT.NET Paris - Juin

Sciences occultes : Profiling API, Debugging API

21 3

Romain Verdier http://codingly.comALT.NET Paris - Juin

(Tissage

Deux autres catégories.

Hybride)31 2

Romain Verdier http://codingly.comALT.NET Paris - Juin

Tissage statique au chargement: Le tissage sur le bytecode a lieu juste avant le chargement de l’assembly.

31 2

Romain Verdier http://codingly.comALT.NET Paris - Juin

Instrumentation statique(Join points)

+Injection dynamique

(Advices)

31 2

4. Et donc, en .NET ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdier http://codingly.comALT.NET Paris - Juin

Une myriade* d’outils.

* 10 000

Romain Verdier http://codingly.comALT.NET Paris - Juin

Mais peu* sont vivants, matures, utilisables, utilisés, etc.

* 3 < n < 6

Romain Verdier http://codingly.comALT.NET Paris - Juin

Cependant, l’AOP n’est pas, ou plus, un fantasme en .NET.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Pour commencer : l’interception dynamique.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Attention, l’interception, ce n’est pas vraiment de l’AOP.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Avant :

Service

Après :

Client ServiceProxy

J’fais ce que je veux.

Client

Romain Verdier http://codingly.comALT.NET Paris - Juin

Proxies .NET Remoting

• RealProxy, TransparentProxy• MarshalByRefObject, ContextBoundObject• Contraignant• Lourd, performances• BCL• (Policy Injection Application Block)

Romain Verdier http://codingly.comALT.NET Paris - Juin

Castle.DynamicProxy

• System.Reflection.Emit• Très mature, très utilisé• Simple• (Castle.Windsor)

Romain Verdier http://codingly.comALT.NET Paris - Juin

Linfu.DynamicProxy

• System.Reflection.Emit• Lightweight• Performant• A la mode, commence à remplacer Castle.DP2• Simple

Romain Verdier http://codingly.comALT.NET Paris - Juin

IoC + Interception = AOP ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

Spring.NET

• Conteneur IoC• Spring.Aop• Interception dynamique• Assez riche• Mature• System.Reflection.Emit

Romain Verdier http://codingly.comALT.NET Paris - Juin

Tissage Statique

Romain Verdier http://codingly.comALT.NET Paris - Juin

Linfu.AOP

• Tissage Hybride• Simple• Utilise Mono.Cecil• Jeune• Supporte mal le debug

Romain Verdier http://codingly.comALT.NET Paris - Juin

PostSharp (PostSharp.Laos)

• Plateforme complète• Full static weaving• Supporte le Load-time weaving• Très riche, mature• Plutôt « easy »• (Commercial)

Romain Verdier http://codingly.comALT.NET Paris - Juin

Mais encore :

5. Bullshit !

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdier http://codingly.comALT.NET Paris - Juin

Interception dynamique

• Real/Transparent Proxy• Castle.DynamicProxy• Linfu.DynamicProxy

code;

Romain Verdier http://codingly.comALT.NET Paris - Juin

Tissage statique

• PostSharp.Laos

• Linfu.AOP

code;

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdier http://codingly.comALT.NET Paris - Juin

Conteneurs IoC & Interception

• Spring.NET• (Castle.Windsor)• (Etc.)

code;

Romain Verdier http://codingly.comALT.NET Paris - Juin

A la main ?

• System.Reflection.Emit

• Mono.Cecil

code;

Romain Verdier http://codingly.comALT.NET Paris - Juin

Romain Verdier http://codingly.comALT.NET Paris - Juin

Pas de conclusion.

Romain Verdier http://codingly.comALT.NET Paris - Juin

Pour mieux débattre ?

Romain Verdier http://codingly.comALT.NET Paris - Juin

k thx bye.

Francehttp://www.altnetfr.orghttp://groups.google.com/group/parisaltnet

romain@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

Romain Verdier http://codingly.comALT.NET Paris - Juin

top related