2
LAN303
Ce qu’il ne fallait pas rater depuis .Net 2.0
Stéphanie Hertrich – MicrosoftFlorent Santin – Access It IDF
3
Idée générale de la session• Donner des outils aux développeurs en mode
projet applicables sans changer de technologie applicative
• Gagner en productivité
• Liste totalement arbitraire (et non exhaustive) de sujets choisis par nous
• 1h c’est peu !!
4
Déroulement de chaque sujet
1.Cas d’application (Où et Quand)
2.Comment vous faites aujourd’hui (Quoi)
3.Comment ça s’utilise ? Démo (Comment)
4.Pourquoi c’est mieux (Pourquoi)
5
Liste des sujets
Code• Méthodes anonymes, lambdas• Les méthodes d’extension
Requêtage et accès aux données• LINQ• Entity Framework
Injection de dépendances• MEF (Managed Extensibility Framework)
Parallélisme et asynchronisme• TPL (Task Parallel Library)• Async / Await
Outils de Dev / ALM• Le diagramme de couche (Explorateur d’architecture)• L’Extension Manager
Maquettage d’applications• SketchFlow
6
Les méthodes anonymes et expressions lambda
Où et Quand ?• Ecriture et utilisation de delegués• Sur la gestion de mes évènements
Comment je faisais avant:• Création d’une méthode qui correspond a la
signature de l’événement• Abonnement
7
DémoMéthodes anonymes et expressions lambda
8
Les méthodes anonymes et expressions lambda
Pourquoi c’est mieux:• Simplification de l’utilisation des délégués• Moins de code• Meilleure lisibilité• Utilisation de variables dans la portée de la
méthode appelante
9
Méthodes d’extension
Où et Quand:
Je veux ajouter du comportement à une classe Foo ou une interface IFoo que:
• Je ne peux pas modifier car je n’ai pas les sources (ex : la classe String)
• J’ai les sources, mais je ne veux pas sortir une nouvelle version de l’assemblie
(ex: appli. déjà installée chez les clients, problématique de versionnement)
10
Méthodes d’Extension
Comment je faisais avant ?• Je créais une méthode statique qui prenait en
paramètre une instance de Foo• Je crée une nouvelle classe qui hérite de Foo (si
pas sealed !)• Je complète Foo si déclaré en partial
• Avec une méthode d’extension ?• Méthode statique dans une classe statique qui
étend Foo/IFoo
11
DémoMéthodes d’extension : - Etendre le type int- Etendre l’interface IList<T>
12
Méthodes d’Extension
Pourquoi c’est mieux ?• Intellisense sur Foo• Permet de compléter une classe dont je n’ai pas les
sources, qu’elle soit partial ou non, sealed ou non• Fonctionne sur les interfaces• Permet de se créer une bibliothèque perso qui étend les
types système qu’on réutilise régulièrement dans les projets : Caisse à Outils
13
LINQ
Où et Quand:• Lorsque je manipule des collections de
données au sens large (Objets, Base de données, XML…)
Comment je faisais avant:• 1 type de source de données = 1 syntaxe
(SQL, XPath, Listes d’objets…)
14
LINQ
Providers
var q = from x in ywhere x > n
select x
Objets SQL XML Entities …
15
DémoLINQ
16
LINQ
Pourquoi c’est mieux :• Langage de requêtage unifié• 1 seule syntaxe pour requêter différentes
sources• Objets, SQL, Entity ou tout autre « provider »• Filtrage des données à la source
17
Entity Framework
Où et Quand ?• Conception d’une couche d’accès aux données• Mappeur Objet / Relationnel (ORM)
Comment je faisais avant:• Utilisation de provider d’accès aux données• Ecriture des requêtes SQL depuis .NET
(mapping Objet / base de données)
18
Entity Framework
Base de donnéesEntitées
A
B
C
A
B
C
Mapping
19
Entity Framework
Base de donnéesEntitées
A
B
C
A
DC
Mapping
20
DémoEntity Framework
21
Entity Framework
Pourquoi c’est mieux :• Plus de SQL à écrire !!!
• Abstraction par rapport au provider de BD et par rapport au schéma de la base
• Basé sur LINQ• Meilleur lisibilité / maintenabilité• Meilleur productivité (intellisense)
• Modification du mapping possible sans recompilation
• Très bien intégré dans Visual Studio: clic, clic, clic
22
Managed Extensibility Framework : La théorie
Quand ?• Développement par composant (plug-in)• Quand je veux pouvoir compléter mon
application a posteriori sans la recompiler
Comment je faisais avant ?• Instanciation dynamique :
Assembly.Load, CreateInstance, Activator,…
23
IRobot.dll
AddOn2.dll AddOn.dll
Robot.dll
MEF : Compléter les actions d’un robot
IAction• string Nom• Action DoIt()
MyRobotReculer Avancer
Tourner
Serrer le main
Faire le café
24
DémoMEF : compléter les actions possibles pour un robot
25
MEF
• Pourquoi c’est mieux ?• Mécanisme d’Injection de dépendances• Développement Orienté plug-in• Couplage faible• Détermine les classes à instancier
manuellement, par configuration ou automatiquement
• Permet de compléter une application existante sans la recompiler, par simple apport de dll
26
Task Parallel Library
• Où Quand ?• Exécuter du code en parallèle• Pour répartir la charge sur plusieurs processeurs• Pour libérer le thread du dispatcher : UI réactive
• Comme je faisais avant :• Threads, synchronisation
• Avec la TPL :• Mécanisme de gestion et de synchronisation de
tâches
27
DémoTPL : Exécuter 3 tâches en //
28
TPL
• Pourquoi c’est mieux ?• On exploite au maximum les machines multi-
cores• Libère le thread de l’UI : interface plus réactive• Mécanisme de gestion et de synchronisation de
tâches• Extensions parallèles et synchrones avec PLinq,
Parallel.ForEach, …
29
Diagramme de couche
Où et Quand ?• Comprendre rapidement une architecture• Maintient d’une architecture cohérente
Comment je faisais avant ? • Création de document d’architecture sur outils tiers• Revue de code pour validation le bon respect
Quoi et pourquoi ?• Explorateur d’architecture: comprendre• Diagramme de couche: garantir
30
DémoAnalyse de l’architecture d’une application
31
Diagramme de couche
Pourquoi c’est mieux :• Complétement intégré dans
Visual Studio 2010 Ultimate
• Validation en continue à la compilation et lors de l’intégration continue
32
Extensions ManagerOù et Quand ?
• Adapter l’utilisation de l’IDE à mes besoins• Utilisation de modèles et composants tiers
Comment je faisais avant ?• Recherche sur forum / blogs pour trouver les
meilleurs Addin• Veille technologique pour les mises à jour de chacun
Quoi et pourquoi ?• Le gestionnaire d’extensions de Visual Studio 2010• Trouver simplement les Addins pertinents• Installation / mise à jour / suppression rapide
d’addins
33
DémoVisual Studio 2010 Productivity Tools
36
SketchFlow : Théorie 1/2
• Quand : Maquettage pour validation avec le client (ou marketing)
• Comment je faisais avant : • Je commence à coder l’application en mode
jetable pour avoir qq chose de montrable rapidement (mais je ne la jette jamais et ça devient la base de mon projet )
• Je m’arrête aux diagrammes UML (use cases, diagrammes de séquence, d’activité) dans le meilleur des cas : pas parlant pour le client ou le marketing
• J’utilise Powerpoint, Paint, …
37
DémoSketchFlow (Blend 3, 4)
38
SketchFlow : Théorie 2/2
• Pourquoi c’est mieux ?• Outil dédié au maquettage : résultat rapide,
mock pour les jeux de données• Pas de branding : le client se concentre sur le
déroulement des écrans et l’aspect fonctionnel• Annotations et Versionnement• Interaction avec TFS et Sharepoint• Pensé pour WPF, Silverlight mais pas que…
39
RécapitulatifSujet Catégorie A partir de UtilisationMéthodes anonymes, lambdas
Code .Net 2.0.Net 3.0, Silverlight
C#
Les méthodes d’extension Code .Net 3.5Silverlight
C#, VB.Net
LINQ Accès aux données .Net 3.5Silverlight
C#, VB.Net
Entity Framework Accès aux données .Net 3.5 SP1Silverlight RIA
C#, VB.Net
MEF Code .Net 4, Silverlight 4(3.5)
C#, VB.Net
TPL Multi-Tâche .Net 4 (3.5)Silverlight
C#, VB.Net
Le diagramme de couche (Explorateur d’architecture)
ALM VStudio 2010 VStudio 2010
L’Extension Manager Divers VStudio 2010 VStudio 2010
SketchFlow Maquettage Blend 3 Blend
40
Les liens utiles
• Entity Framework : http://bit.ly/dWiKro• MEF : http://mef.codeplex.com/• TPL : http://parallelpatterns.codeplex.com/
Nos Blogs : http://blogs.msdn.com/stephehttp://blogs.developpeurs.org/azra
41
MSDN et TechNet : l’essentiel des ressources techniques à portée de clic
http://technet.com http://msdn.com
Portail administration et infrastructure pour informaticiens
Portail de ressources technique pour développeurs