AOP dans .Net avec PostSharp

Slides:



Advertisements
Présentations similaires
Un environnement de développement éducatif
Advertisements

Java EPITECH 2012
« Hello World! » Diapositive no.1. Ajout de la logique daffaire (« Business Logic ») Dans lentité « Employee » : /// /// Age as of today /// public int.
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Formation universitaire à .NET: Introduction à C#
Outils de Prototypage Rapide Multi-Dispositifs : Wcomp .NET
« Les Mercredis du développement » Les Starter Kits Level 100 Présenté par Pierre Lagarde Relation technique développeur
DOM Document Object Model. Généralités Standard du W3C Parseur XML – Génération dun arbre dobjet – Construction totale de larbre DOM est spécifié en IDL.
SAX Simple API for XML. Généralités API non standard développé par les membres du forum XML-DEV Parseur XML – Orienté événement – Parsing dynamique SAX.
C++ 5ème cours Patrick Reuter maître de conférences
Le mécanisme des exceptions
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Séparation des préoccupations (c) 2004, Audrey Occello, LF8 MOC Seconde partie Un exemple de programmation orientée Aspect avec AspectJ.
Plan du cours 5:Threads introduction Définition Création des Threads
Symfony Formulaires.
Jc/md/lp-01/05Trains_corrigé1 Threads et Synchronisation Application train Corrigé
Bases de données Objet singleton pour la connexion
JDBC: manipuler une base de données en Java IFT6800 – E 2007 Jian-Yun Nie.
Connexion base de données
Chapitre IV Object, interfaces, classes imbriquées.
Injection de dépendances
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Actualités Services Providers & SPLA
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Cours du 19 octobre. POO-L3 H. Fauconnier2 E) Constructeurs et héritage Le constructeurs ne sont pas des méthodes comme les autres: le redéfinition na.
La programmation objet Illustration de la POO en Pascal
Les exceptions. Quest ce quune exception ? Une erreur dans le programme Due à un bug ou un cas « anormal » Gestion complète en java : JVM Dans dautre.
Palais des congrès Paris 7, 8 et 9 février Mardi 7 février Nicolas Ledez Architecte système Orange Business Services Introduction à Ruby.
TortoiseSVN N°. Subversion : pour quoi faire ? Avoir un espace de stockage commun – Tous les étudiants du SIGLIS ont un espace svn commun Partager vos.
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
Quelques notes sur CORBA F. Boyer, Oct Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de.
1 Développement des Applications des Bases de Données Chapitre 6, Sections
NSY102 1 Concurrence compléments Notes de cours Cnam Paris jean-michel Douin, douin au cnam point fr 19 Mars 2007.
Le patron de conception « Strategy » Simon Durocher ( )
22 Model-View-ViewModel et testabilité pour WPF/Silverlight Richard Clark Clark Ingénierie Informatique Simon Ferquel Access It.
Programmation Orienté Objet Application Au Langage JAVA Licence professionnelle ATC ~ 07/08 Bessem BOURAOUI
JUnit Présentation complète de JUnit et « guide d’utilisation » en 13 transparents.
29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB.
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke JavaCC.
18/05/05SE Info2 - S. L'haire UNIGE1 Lecture cha î ne caract è res Un document HTML est compos é de balises Une balise est compos é e de caract è res entre.
Design Pattern Memento. Principe : Enregistrer les changements d'états d'un objet Objectif : Pouvoir restituer les états précédents d'un objet.
Faculté I&C, Claude Petitpierre, André Maurer 1 Concepts dhéritage Héritage dimplémentation hasA Héritage de spécialisation isA.
Multi-Thread Jian-Yun Nie
Exceptions IFT1025: Programmation 2 Jian-Yun Nie.
Textract Magali Paquot. 2 Outil d'indexation (semi-) automatique de texte.
Badr Benmammar Formation Développeur Java Thread et Swing Badr Benmammar
Java Swing.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
CSI1502 Principes fondamentaux en conception des logiciels Chapter 8: Gestion des exceptions.
BlueJ_VI 1 Java, les objets : tout de suite ! Test, assertions, « vérification statique » Notes de cours associées au chapitre 6 Avec des assertions, utilisation.
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
Programmation Orienté Objet en C++ Ricard julien.
Développement d’application avec base de données
GWT - QuickStart V 1.0 / May. Mise en place de l’environnement Java : Version 1.4 minimum IDE Eclipse 3.3 Europa : lien (Eclipse J2EE recommandée)‏lien.
1 PtiLoo Compléments de Cours pour réaliser les Extensions version 20/08/ :51 Ajout à faire pour version 20/08/ :51 n "animation" pour.
Programme de retouche d’images sous python
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Propriétés. Propriétés ► Les propriétés peuvent être visibles dans les environnements de scripts ► Les propriétés peuvent être accédées par programmation.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
Tutorat en bio-informatique
Schéma de conception Factory Method Exemple Sylvain Giroux.
Code Contracts Gilles TOURREAU - MVP C# Architecte .NET / Formateur
ASP.NET AJAX Control Toolkit
22 Romain VERDIER Architecte FastConnect Yann SCHWARTZ Architecte/plombier Polom.
Bases de données Singleton pour la connexion
Schéma de conception Factory Method Exemple
Bases de données Singleton pour la connexion
Transcription de la présentation:

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) [NotifyPropertyChanged] public class Person { 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