Développement Asp.Net et Asp.Net MVC Pierre Couzy
Agenda ASP.Net a grossi Depuis ASP.Net 2 (qui est encore la version sousjacente du framework), on a vu RIA Services Ajax (Client, Serveur, Toolkit, Web services,..) Ado.Net Data Services MVC Dynamic Data Silverlight jquery.. et j en passe.
Que cherche à faire ASP.Net 4? Remettre un peu d ordre Aligner nos frameworks de développement web sur une version majeure de.net Fournir dans un seul outil les add-ons divers qui existent aujourd'hui. Rassurer sur l avenir de WebForms Structurer les offres ASP.Net de façon cohérente Prendre en compte 4 ans de feedback Améliorations de l existant Support de nouvelles techniques de développement Ajax, MVC, RIA, RAD Petits et gros gains de productivité Intellisense, déploiement, monitoring, contrôles,..
Structure d ASP.Net ASP.Net «Core» Web Forms Ajax MVC Dynamic Data Vos applis
Améliorations du cœur d ASP.Net Nouveautés Web.Config Plus petit, plus configurable Gestion du cache Extensible, réutilisable Compression des sessions Auto-démarrage des applis Web Multi-targeting
Web.Config Aujourd hui : Demain :
Web.Config Gestion des configurations : Web.Config demeure inchangé, Des extensions permettent de spécifier des transformations appliquées au déploiement Web.Debug.config, Web.Release.config, Transformations disponibles Delete, Replace, Insert, etc.
Réécriture du cache ASP.Net Vu le nombre d applications non web qui utilisent le cache d Asp.net, nous avons décidé de le découpler d Asp.Net. Nouvelles classes utilisables dès la V4, dans System.Runtime.Caching.dll Le fonctionnement est très proche de celui du cache d Asp.Net mais des points d extensibilité ont été introduits Vous pouvez bien sûr continuer de travailler avec le cache standard d Asp.Net
Gestion du cache : les fournisseurs ASP.Net 2 a brièvement eu (en beta) un cache sur disque. Il est de retour, avec des amis Disque Mémoire Cache Windows Azure CacheProvider Cache réparti (Velocity)
Fournisseurs de cache DiskCacheProvider System.Web.Caching.OutputCacheProvider Méthodes Add / Get / Set / Contains / Remove.. Déclarés dans le web.config Utilisables dans les pages et contrôles Ou dans Global.asax
Compression des sessions Optimisation pour les sessions déportées Serveur de sessions Sessions en base de données Rappel : ASP.Net permet d écrire ses propres fournisseurs de stockage de session, l équipe Velocity en fournit d ailleurs un.
Auto-démarrage des applis Web A partir d IIS 7.5 Le site se lance en deux phases : Démarrage du site mais sans ouvrir de listener http Exécution du code d initialisation (chargement des caches, etc) Démarrage des listeners Http
Et aussi RedirectPermanent <%: expression%> qui fait un HtmlEncode Améliorations de sécurité & robustesse Encodage personnalisable des flux sortants Validation des requêtes entrantes Contrôle sur la longueur max des URLs URL et Querystring Monitoring des performances d une appli spécifique dans un AppPool Multi-targeting
Quoi de neuf dans WebForms? Utilisation du nouveau moteur de routage Retouches sur le ViewState Conventions de nommage pour ClientId Simplification et améliorations des contrôles Des logos en flamme QueryExtender : ajout de filtres
Le moteur de routage Que préférez-vous : http://www.bla.com/produits.aspx?categoryid=12 http://www.bla.com/produits/bicyclettes Exploiter les paramètres par code
Le moteur de routage Utilisation déclarative des routes Pour générer les URLs Pour exploiter les paramètres
Retouches sur le ViewState Le ViewState a beaucoup maigri depuis Asp.Net 1 Meilleure sérialisation, utilisation de ControlState, etc. Il reste une limitation : si votre conteneur vous interdit d utiliser le ViewState, vous n y avez pas droit. Désactiver le ViewState de façon sélective peut vite devenir un cauchemar ASP.Net 4 introduit l attribut ViewStateMode
ViewStateMode Valeurs possibles de ViewStateMode Enabled : ce contrôle a un ViewState Disabled : ce contrôle n a pas de ViewState Inherit (défaut): ce contrôle reprend le comportement de son conteneur Préséance entre les attributs EnableViewState et ViewStateMode : ViewStateMode n est pas pris en considération si EnableViewState vaut False, pour le contrôle ou un de ses conteneurs
ClientId Les contrôles ASP.Net ont un nom côté serveur, et un autre côté client. La propriété ClientIDMode permet de spécifier la convention de nommage du contrôle côté client AutoID : comme par le passé Static : identique au nom serveur Predictable : contient la clé de votre datasource (précisée par l attribut ClientIDRowSuffix) Inherit <span id="lbltest">test</span> <asp:content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <asp:label ID="lblTest" ClientIDMode="Static" runat="server Text="Test"> </asp:label> </asp:content>
Changements dans le rendu Pour prendre en compte les standards (XHTML, mais aussi accessibilité, et CSS), ASP.Net 4 change le rendu de bon nombre de contrôles Disparition de l attribut enabled sauf pour les contrôles de saisie, remplacé par un attribut de classe Suppression des DIV autour des champs cachés Suppression du Border=0 pour certains tableaux et images etc. Ce comportement peut modifier l aspect de vos pages, il est donc désactivable
Nouveautés dans les contrôles ListView : plus besoin de déclarer un LayoutTemplate CheckBoxList, RadioButtonList Rendu possible en Listes HTML pour habillage par CSS (RepeatLayout=OrderedList) Le contrôle Menu Rendu par <ul><li> au lieu de tableaux Navigation au clavier
Contrôle de graphe 35 styles de graphiques Support 2D/3D Utilise le Data Binding
QueryExtender Le contrôle QueryExtender fonctionne sur des sources LINQ (LinqToSql, Entity Framework, LinqToObjects). Il étend la requête avant son exécution pour prendre en compte des critères supplémentaires
QueryExtender Extensions possibles : SearchExpression RangeExpression PropertyExpression OrderByExpression (et ThenByExpression) CustomExpression ControlFilterExpression, DynamicFilterExpression Pour Dynamic Data
Nouveautés Ajax Ajax Control Toolkit : nouveaux contrôles Templates côté client jquery Microsoft Ajax CDN
Ajax Control Toolkit Projet CodePlex comportant des contrôles et des extendeurs Ajax. Utilisables dans VS 2008 et VS 2010 Nouveautés : SeaDragon AsyncFileUpload
Templates client Un moteur de rendu client Basé sur des templates pour une plus grande souplesse Garde un markup très lisible dans la page Utilisation de Javascript par le développeur possible, mais pas obligatoire Bonne intégration avec les autres composants Javascript/Ajax
Que peut faire ce moteur de rendu? Récupérer une version client des données d un Web Service (wcf/adods/asmx/rest) du rendu par templates : class="sys-template" Binding simple : {{ expression }} Binding bi-directionnel : {binding champ } Du suivi de modifications DataContext client De la propagation serveur des modifications De la manipulation Ado.Net Data Services AdoNetDataContext
jquery Librairie open source (MIT) intégrée telle quelle à VS2010 et supportée par Microsoft Sélecteur très puissant : $(':text') => toutes les textbox $('#GridView1 tr:first') => Première ligne de la GridView1 Chaînage : $(':text').val().focus(function() {$(this).css('color', 'red');}); jquery.each() : Base du traitement par lots
jquery ou MS Ajax? Vous pouvez les combiner ASP.NET AJAX jquery AJAX Requests Composants et Contrôles Client Templates AJAX Control Toolkit Sélecteurs Animations Plugins
Asp.Net MVC ASP.NET Dynamic Data Présentation ASP.NET WebForms ASP.NET MVC ASP.NET Core Runtime
Pour mieux définir les responsabilités Master Page Control Control Control Control Page Control Control Html Couche de présentation Logique métier Accès données Control Control Structurer une appli WebForms demande de la discipline
Peu d influence sur le rendu.. Encore une fois, cette situation n est pas systématique en WebForms.
Code difficile à tester Logic UI
MVC = Modèle-Vue-Contrôleur Contrôleur (Point d entrée) Vue (Présentation) Modèle (Métier)
Fonctionnement Requête Contrôleur Contrôleur Gère les entrées (requêtes HTTP) Réponse Vue Vue Représentation IHM du modèle
Buts de conception de MVC Faciliter la conception de sites testables Donner le contrôle complet du rendu Travailler sur une sémantique REST Forcer la structuration des applications Proposer une bonne extensibilité
Extensibilité Chaque brique peut être remplacée par votre propre implémentation Action Filters Model Binders Controller Builder Controller Factory Controller Controller Action Invoker View View Engine Action Result
Asp.Net MVC Un autre modèle de développement Web Ne remplace pas WebForms Intéressant si vous voulez Imposer une bonne structure à vos applis Avoir des sites adaptés aux tests unitaires Contrôler avec précision le rendu HTML de vos pages Asp.Net MVC est à Asp.Net ce qu ATL est à MFC : Plus petit Plus élégant Moins orienté RAD
Asp.Net MVC en français 7 ateliers pour tout découvrir de MVC En ligne sur le site MSDN http://msdn.microsoft.com/fr-fr/asp.net Dans les coach Asp.Net Fait par David Rousset