SlideShare una empresa de Scribd logo
1 de 21
AOP dans .Net 
avec PostSharp 
Eric Moreau, MVP 
Moer inc. 
eric@moer.ca 
www.moer.ca
AOP – Aspect Oriented Programming 
• Créé par Xerox 
• Utilisé depuis un certain temps en Java 
• Façon de programmer qui favorise de déplacer tous les requis non-fonctionnels 
qui viennent : 
• Cacher les requis fonctionnels au travers de toute sorte d’autre chose 
• Augmenter le nombre de ligne 
• Multiplier le nombre de lignes identiques/très similaires 
• Diminuer la « readability » 
• Augmenter le nombre de bugs potentiels 
• Augmenter le temps de modification
PostSharp 
• SharpCrafters (http://www.postsharp.net/) 
• Requiert au minimum VS2010 – .Net Framework 2.0 
• fonctionne même avec VS Express 
• 3 versions 
• Les 3 ont besoin d’une licence 
• Express - Gratuite 
• Utilisation commerciale permise 
• Professional (329 euros – 475$ CAD) 
• Ultimate (598 euros – 900$ CAD)
Intégration PostSharp 
• Installation ou Nuget 
• Modifie de façon indirecte votre code 
• Étape ajouter après la compilation mais avant l’exécution 
• Principaux mécanismes 
• Boundary (méthodes ou classes) 
• OnEntry 
• OnExit 
• OnException 
• OnSuccess 
• Interceptor
Recette PostSharp 
• Copie du code existant dans de nouvelles classes 
• Quel code? « Code-smells » 
• Code répété 
• Non-functionnal requirements 
• Cross-cutting concerns 
• Ajoute des attributs à nos méthodes (ou classes) 
• Exemple 
• NotifyPropertyChanged 
• Logging 
• Exception Handling 
• Multithreading 
• Icon (wait/hourglass)
Exemple 1 (ratio 30-10) 
public class Person : INotifyPropertyChanged 
{ 
private string firstName; 
public event PropertyChangedEventHandler PropertyChanged; 
protected virtual void OnPropertyChanged(string propertyName) 
{ 
if ( this.PropertyChanged != null ) 
{ 
this.PropertyChanged( this, 
new PropertyChangedEventArgs(propertyName) ); 
} 
} 
public string FirstName 
{ 
get { return this.firstName; } 
set 
{ 
if ( this.firstName != value ) 
{ 
this.firstName = value; 
this.OnPropertyChanged("FirstName"); 
this.OnPropertyChanged("FullName"); 
} 
} 
} 
public string FullName 
{ 
get { return this.FirstName + " " + this.LastName; } 
} 
} 
[NotifyPropertyChanged] 
public class Person 
{ 
public string FirstName { get; set; } 
public string LastName { get; set; } 
public string FullName 
{ 
get { return FirstName + " " + LastName; } 
} 
}
Exemple 2 - Méthode de départ 
10 lignes
Ajout des « non-functionnal requirements » 
• Validation des paramètres reçus 
if(agreement == null) 
throw new ArgumentNullException("agreement");
Ajout des « non-functionnal requirements » 
• Log l’entrée et les paramètres reçus 
Console.WriteLine("Accrue: {0}", DateTime.Now); 
Console.WriteLine("Customer: {0}", agreement.Customer.Id); 
Console.WriteLine("Vehicle: {0}", agreement.Vehicle.Id);
Ajout des « non-functionnal requirements » 
• Traitement des exceptions 
try 
{ 
// … real code goes here … 
} 
catch (Exception ex) 
{ 
if (!Exceptions.Handle(ex)) 
throw; 
}
Ajout des « non-functionnal requirements » 
• Ajout de transactions 
using (var scope = new TransactionScope()) 
{ 
// … real code goes here … 
scope.Complete(); 
}
Ajout des « non-functionnal requirements » 
• Ré-essaie 3 fois 
var retries = 3; 
var succeeded = false; 
while (!succeeded) { 
try { 
// … real code goes here … 
succeeded = true; 
} catch { 
if(retries >=0) 
retries--; 
else 
throw; 
} 
}
Ajout des « non-functionnal requirements » 
• Log la sortie 
Console.WriteLine("Accrue complete: {0}", DateTime.Now);
Méthode finale 
58 lignes de codes!!!
Exemple 2 - PostSharpé 
10 lignes + 4 attributs = 14 lignes
À quoi ressemble un aspect
À quoi ressemble un aspect
Exemple 3 – Threading (mécanisme interceptor)
Exemple 3 – Threading – Interceptor
En conclusion 
• PostSharp n’est pas unique 
• http://www.postsharp.net/alternatives 
• Castle Project (http://www.castleproject.org/projects/dynamicproxy/) 
• LinFu (https://github.com/philiplaureano/LinFu) 
• Unity (http://unity.codeplex.com/) Microsoft Patterns & Practices 
• Spring.Net (http://www.springframework.net/doc-latest/reference/html/aop.html) 
• SheepAspect (http://sheepaspect.codeplex.com/) – CodePlex Alpha 2013 
• PostSharp/AOP ne règle pas tout 
• Problèmes avec l’obfuscation 
• Problèmes avec les génériques 
• Aller doucement – un aspect à la fois
AOP dans .Net 
avec PostSharp 
Eric Moreau, MVP 
Moer inc. 
eric@moer.ca 
www.moer.ca

Más contenido relacionado

La actualidad más candente

Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scalaSOAT
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
BackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programmingBackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programmingPublicis Sapient Engineering
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)Damien Seguy
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelleGeeks Anonymes
 
Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en JavascriptBenoit Zohar
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scalaclem_simon
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronestchappui
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?Ruau Mickael
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scalaBenoit Wilcox
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage GoSylvain Wallez
 
Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Javajollivetc
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelleMICHRAFY MUSTAFA
 
CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeadsRNS
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !ochafik
 

La actualidad más candente (20)

Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
BackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programmingBackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programming
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
Ns algo 3
Ns algo 3Ns algo 3
Ns algo 3
 
Programmation Fonctionnelle
Programmation FonctionnelleProgrammation Fonctionnelle
Programmation Fonctionnelle
 
Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en Javascript
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scala
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?
 
Ns algo 2
Ns algo 2Ns algo 2
Ns algo 2
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scala
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage Go
 
Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Java
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubs
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
Clonage d'objets
Clonage d'objetsClonage d'objets
Clonage d'objets
 

Destacado

Gulet cruises by images
Gulet cruises by imagesGulet cruises by images
Gulet cruises by imagesgoolets
 
Presentation pertes ponctuelles 12.09.2012
Presentation pertes ponctuelles  12.09.2012Presentation pertes ponctuelles  12.09.2012
Presentation pertes ponctuelles 12.09.2012Phytofar mobile
 
Les industries manufacturières en Tunisie
Les industries manufacturières en TunisieLes industries manufacturières en Tunisie
Les industries manufacturières en TunisieAMZ Software
 
Evolutio Communiqué de Presse
Evolutio Communiqué de PresseEvolutio Communiqué de Presse
Evolutio Communiqué de PresseThomas Puig
 
Presentation phytofar techniques de pulvérisation 12092012
Presentation phytofar techniques de pulvérisation 12092012Presentation phytofar techniques de pulvérisation 12092012
Presentation phytofar techniques de pulvérisation 12092012Phytofar mobile
 
Re b2 ursa andra iulia
Re b2 ursa andra iuliaRe b2 ursa andra iulia
Re b2 ursa andra iuliaAndra Iulia
 
09 psa question_paper_2013
09 psa question_paper_201309 psa question_paper_2013
09 psa question_paper_2013nirmal1982
 
Presentation de l’anpe et le secteur des tic
Presentation de l’anpe et le secteur des ticPresentation de l’anpe et le secteur des tic
Presentation de l’anpe et le secteur des ticpromocic
 
La BU sera ouverte demain samedi 22 février de 9h à 15h (Journée Portes Ouver...
La BU sera ouverte demain samedi 22 février de 9h à 15h (Journée Portes Ouver...La BU sera ouverte demain samedi 22 février de 9h à 15h (Journée Portes Ouver...
La BU sera ouverte demain samedi 22 février de 9h à 15h (Journée Portes Ouver...Nathalie Rajon
 
Table ronde : les réseaux de distribution de la destination Provence à l'inte...
Table ronde : les réseaux de distribution de la destination Provence à l'inte...Table ronde : les réseaux de distribution de la destination Provence à l'inte...
Table ronde : les réseaux de distribution de la destination Provence à l'inte...paysdaix
 
L’aide à distance
L’aide à distanceL’aide à distance
L’aide à distancefreistadt35
 
Intégration Professionnelle JCertif Conférence 2013
Intégration Professionnelle JCertif Conférence 2013Intégration Professionnelle JCertif Conférence 2013
Intégration Professionnelle JCertif Conférence 2013Danielle AKINI
 
Carrière informatique sam savoie
Carrière informatique  sam savoieCarrière informatique  sam savoie
Carrière informatique sam savoiesamsavoie13
 
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Djamel Zouaoui
 
Information metier hotellerie restauration fabrication de crêpes ou pizzas ww...
Information metier hotellerie restauration fabrication de crêpes ou pizzas ww...Information metier hotellerie restauration fabrication de crêpes ou pizzas ww...
Information metier hotellerie restauration fabrication de crêpes ou pizzas ww...Emploi Hotellerie Restauration
 
VisualARQ (Français), BIM, modélisation 2D et 3D de projects architecturaux d...
VisualARQ (Français), BIM, modélisation 2D et 3D de projects architecturaux d...VisualARQ (Français), BIM, modélisation 2D et 3D de projects architecturaux d...
VisualARQ (Français), BIM, modélisation 2D et 3D de projects architecturaux d...VisualARQ
 
Conseils pour l'achat de sa literie lematelas.fr
Conseils pour l'achat de sa literie lematelas.frConseils pour l'achat de sa literie lematelas.fr
Conseils pour l'achat de sa literie lematelas.frLematelas.fr
 

Destacado (20)

Gulet cruises by images
Gulet cruises by imagesGulet cruises by images
Gulet cruises by images
 
Presentation pertes ponctuelles 12.09.2012
Presentation pertes ponctuelles  12.09.2012Presentation pertes ponctuelles  12.09.2012
Presentation pertes ponctuelles 12.09.2012
 
Les industries manufacturières en Tunisie
Les industries manufacturières en TunisieLes industries manufacturières en Tunisie
Les industries manufacturières en Tunisie
 
Francés
FrancésFrancés
Francés
 
Des avocats dénoncent Me Lesly Jules...
Des avocats dénoncent Me Lesly Jules...Des avocats dénoncent Me Lesly Jules...
Des avocats dénoncent Me Lesly Jules...
 
Evolutio Communiqué de Presse
Evolutio Communiqué de PresseEvolutio Communiqué de Presse
Evolutio Communiqué de Presse
 
Presentation phytofar techniques de pulvérisation 12092012
Presentation phytofar techniques de pulvérisation 12092012Presentation phytofar techniques de pulvérisation 12092012
Presentation phytofar techniques de pulvérisation 12092012
 
Re b2 ursa andra iulia
Re b2 ursa andra iuliaRe b2 ursa andra iulia
Re b2 ursa andra iulia
 
09 psa question_paper_2013
09 psa question_paper_201309 psa question_paper_2013
09 psa question_paper_2013
 
Presentation de l’anpe et le secteur des tic
Presentation de l’anpe et le secteur des ticPresentation de l’anpe et le secteur des tic
Presentation de l’anpe et le secteur des tic
 
La BU sera ouverte demain samedi 22 février de 9h à 15h (Journée Portes Ouver...
La BU sera ouverte demain samedi 22 février de 9h à 15h (Journée Portes Ouver...La BU sera ouverte demain samedi 22 février de 9h à 15h (Journée Portes Ouver...
La BU sera ouverte demain samedi 22 février de 9h à 15h (Journée Portes Ouver...
 
Table ronde : les réseaux de distribution de la destination Provence à l'inte...
Table ronde : les réseaux de distribution de la destination Provence à l'inte...Table ronde : les réseaux de distribution de la destination Provence à l'inte...
Table ronde : les réseaux de distribution de la destination Provence à l'inte...
 
L’aide à distance
L’aide à distanceL’aide à distance
L’aide à distance
 
bébé secoué
bébé secouébébé secoué
bébé secoué
 
Intégration Professionnelle JCertif Conférence 2013
Intégration Professionnelle JCertif Conférence 2013Intégration Professionnelle JCertif Conférence 2013
Intégration Professionnelle JCertif Conférence 2013
 
Carrière informatique sam savoie
Carrière informatique  sam savoieCarrière informatique  sam savoie
Carrière informatique sam savoie
 
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
 
Information metier hotellerie restauration fabrication de crêpes ou pizzas ww...
Information metier hotellerie restauration fabrication de crêpes ou pizzas ww...Information metier hotellerie restauration fabrication de crêpes ou pizzas ww...
Information metier hotellerie restauration fabrication de crêpes ou pizzas ww...
 
VisualARQ (Français), BIM, modélisation 2D et 3D de projects architecturaux d...
VisualARQ (Français), BIM, modélisation 2D et 3D de projects architecturaux d...VisualARQ (Français), BIM, modélisation 2D et 3D de projects architecturaux d...
VisualARQ (Français), BIM, modélisation 2D et 3D de projects architecturaux d...
 
Conseils pour l'achat de sa literie lematelas.fr
Conseils pour l'achat de sa literie lematelas.frConseils pour l'achat de sa literie lematelas.fr
Conseils pour l'achat de sa literie lematelas.fr
 

Similar a Eric Moreau: AOP in .Net sing PostSharp

Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchMourad DACHRAOUI
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5halleck45
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Damien Seguy
 
Android Optimisations Greendroid
Android Optimisations GreendroidAndroid Optimisations Greendroid
Android Optimisations GreendroidGDG Nantes
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdfPatiento Del Mar
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 

Similar a Eric Moreau: AOP in .Net sing PostSharp (20)

Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Part1
Part1Part1
Part1
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)
 
Android Optimisations Greendroid
Android Optimisations GreendroidAndroid Optimisations Greendroid
Android Optimisations Greendroid
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
JAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de donnéesJAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de données
 
11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 

Más de MSDEVMTL

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.netMSDEVMTL
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2MSDEVMTL
 
Property based testing
Property based testingProperty based testing
Property based testingMSDEVMTL
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureMSDEVMTL
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataMSDEVMTL
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new featuresMSDEVMTL
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3MSDEVMTL
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018MSDEVMTL
 
Api gateway
Api gatewayApi gateway
Api gatewayMSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsMSDEVMTL
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureMSDEVMTL
 
Data science presentation
Data science presentationData science presentation
Data science presentationMSDEVMTL
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...MSDEVMTL
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreMSDEVMTL
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsMSDEVMTL
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageMSDEVMTL
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de casMSDEVMTL
 

Más de MSDEVMTL (20)

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.net
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2
 
Property based testing
Property based testingProperty based testing
Property based testing
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft Azure
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & Data
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new features
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
 
Api gateway
Api gatewayApi gateway
Api gateway
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environments
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts Azure
 
Data science presentation
Data science presentationData science presentation
Data science presentation
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api core
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling Average
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de cas
 

Eric Moreau: AOP in .Net sing PostSharp

  • 1. AOP dans .Net avec PostSharp Eric Moreau, MVP Moer inc. eric@moer.ca www.moer.ca
  • 2. AOP – Aspect Oriented Programming • Créé par Xerox • Utilisé depuis un certain temps en Java • Façon de programmer qui favorise de déplacer tous les requis non-fonctionnels qui viennent : • Cacher les requis fonctionnels au travers de toute sorte d’autre chose • Augmenter le nombre de ligne • Multiplier le nombre de lignes identiques/très similaires • Diminuer la « readability » • Augmenter le nombre de bugs potentiels • Augmenter le temps de modification
  • 3. PostSharp • SharpCrafters (http://www.postsharp.net/) • Requiert au minimum VS2010 – .Net Framework 2.0 • fonctionne même avec VS Express • 3 versions • Les 3 ont besoin d’une licence • Express - Gratuite • Utilisation commerciale permise • Professional (329 euros – 475$ CAD) • Ultimate (598 euros – 900$ CAD)
  • 4. Intégration PostSharp • Installation ou Nuget • Modifie de façon indirecte votre code • Étape ajouter après la compilation mais avant l’exécution • Principaux mécanismes • Boundary (méthodes ou classes) • OnEntry • OnExit • OnException • OnSuccess • Interceptor
  • 5. Recette PostSharp • Copie du code existant dans de nouvelles classes • Quel code? « Code-smells » • Code répété • Non-functionnal requirements • Cross-cutting concerns • Ajoute des attributs à nos méthodes (ou classes) • Exemple • NotifyPropertyChanged • Logging • Exception Handling • Multithreading • Icon (wait/hourglass)
  • 6. Exemple 1 (ratio 30-10) public class Person : INotifyPropertyChanged { private string firstName; public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { if ( this.PropertyChanged != null ) { this.PropertyChanged( this, new PropertyChangedEventArgs(propertyName) ); } } public string FirstName { get { return this.firstName; } set { if ( this.firstName != value ) { this.firstName = value; this.OnPropertyChanged("FirstName"); this.OnPropertyChanged("FullName"); } } } public string FullName { get { return this.FirstName + " " + this.LastName; } } } [NotifyPropertyChanged] public class Person { public string FirstName { get; set; } public string LastName { get; set; } public string FullName { get { return FirstName + " " + LastName; } } }
  • 7. Exemple 2 - Méthode de départ 10 lignes
  • 8. Ajout des « non-functionnal requirements » • Validation des paramètres reçus if(agreement == null) throw new ArgumentNullException("agreement");
  • 9. Ajout des « non-functionnal requirements » • Log l’entrée et les paramètres reçus Console.WriteLine("Accrue: {0}", DateTime.Now); Console.WriteLine("Customer: {0}", agreement.Customer.Id); Console.WriteLine("Vehicle: {0}", agreement.Vehicle.Id);
  • 10. Ajout des « non-functionnal requirements » • Traitement des exceptions try { // … real code goes here … } catch (Exception ex) { if (!Exceptions.Handle(ex)) throw; }
  • 11. Ajout des « non-functionnal requirements » • Ajout de transactions using (var scope = new TransactionScope()) { // … real code goes here … scope.Complete(); }
  • 12. Ajout des « non-functionnal requirements » • Ré-essaie 3 fois var retries = 3; var succeeded = false; while (!succeeded) { try { // … real code goes here … succeeded = true; } catch { if(retries >=0) retries--; else throw; } }
  • 13. Ajout des « non-functionnal requirements » • Log la sortie Console.WriteLine("Accrue complete: {0}", DateTime.Now);
  • 14. Méthode finale 58 lignes de codes!!!
  • 15. Exemple 2 - PostSharpé 10 lignes + 4 attributs = 14 lignes
  • 16. À quoi ressemble un aspect
  • 17. À quoi ressemble un aspect
  • 18. Exemple 3 – Threading (mécanisme interceptor)
  • 19. Exemple 3 – Threading – Interceptor
  • 20. En conclusion • PostSharp n’est pas unique • http://www.postsharp.net/alternatives • Castle Project (http://www.castleproject.org/projects/dynamicproxy/) • LinFu (https://github.com/philiplaureano/LinFu) • Unity (http://unity.codeplex.com/) Microsoft Patterns & Practices • Spring.Net (http://www.springframework.net/doc-latest/reference/html/aop.html) • SheepAspect (http://sheepaspect.codeplex.com/) – CodePlex Alpha 2013 • PostSharp/AOP ne règle pas tout • Problèmes avec l’obfuscation • Problèmes avec les génériques • Aller doucement – un aspect à la fois
  • 21. AOP dans .Net avec PostSharp Eric Moreau, MVP Moer inc. eric@moer.ca www.moer.ca