Développement Asp.Net et Asp.Net MVCdownload.microsoft.com/documents/France/MSDAYS/2009/...•Pour...

Preview:

Citation preview

Développement Asp.Net et Asp.Net MVC Pierre Couzy

• ASP.Net a grossi • Depuis ASP.Net 2 (qui est encore la version sous-

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

Agenda

• 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, ..

Que cherche à faire ASP.Net 4 ?

ASP.Net « Core »

Web Forms Ajax MVC Dynamic

Data

Vos applis

Structure 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

Améliorations du cœur d’ASP.Net

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

Web.Config

• 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

Réécriture du cache ASP.Net

• ASP.Net 2 a brièvement eu (en beta) un cache sur disque. Il est de retour, avec des amis

Gestion du cache : les fournisseurs

Cache

CacheProvider

Disque

Windows Azure

Cache réparti

(Velocity)

Mémoire

• Déclarés dans le web.config

• Utilisables dans les pages et contrôles

• Ou dans Global.asax

Fournisseurs de cache

DiskCacheProvider System.Web.Caching.OutputCacheProvider

Méthodes Add / Get / Set / Contains / Remove..

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

Compression des sessions

• 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

Auto-démarrage des applis Web

• 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

Et aussi …

• 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

Quoi de neuf dans WebForms ?

• 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

Le moteur de routage

• 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

Retouches sur le ViewState

• 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

ViewStateMode

• 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

ClientId

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <asp:Label ID="lblTest" ClientIDMode="Static" runat="server“ Text="Test"> </asp:Label> </asp:Content>

<span id="lblTest">Test</span>

• 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

Changements dans le rendu

• 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

Nouveautés dans les contrôles

• 35 styles de graphiques

• Support 2D/3D

• Utilise le Data Binding

Contrôle de graphe

• 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

QueryExtender

• Ajax Control Toolkit : nouveaux contrôles

• Templates côté client

• jQuery

• Microsoft Ajax CDN

• …

Nouveautés Ajax

• Projet CodePlex comportant des contrôles et des extendeurs Ajax.

• Utilisables dans VS 2008 et VS 2010

• Nouveautés : SeaDragon AsyncFileUpload

Ajax Control Toolkit

• 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

Templates client

• 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

Que peut faire ce moteur de rendu ?

• 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

• Vous pouvez les combiner

jQuery ou MS Ajax ?

ASP.NET AJAX

AJAX Requests

Composants et Contrôles

Client Templates

AJAX Control Toolkit

jQuery

Sélecteurs

Animations

Plugins

Asp.Net MVC

ASP.NET Dynamic Data

ASP.NET WebForms

ASP.NET MVC

Présentation

Runtime ASP.NET

Core

Master Page

Control

Control

Pour mieux définir les responsabilités

Html Couche de présentation Logique métier Accès données

Structurer une appli WebForms demande de la discipline

Control

Control Page

Control

Control

Control

Control

Peu d’influence sur le rendu

.. Encore une fois, cette situation n’est pas systématique en WebForms.

Logic UI

Code difficile à tester

MVC = Modèle-Vue-Contrôleur

Contrôleur (Point d’entrée)

Modèle (Métier)

Vue (Présentation)

Fonctionnement

Requête

Vue

Contrôleur

Réponse

Contrôleur Gère les entrées (requêtes HTTP)

Vue Représentation IHM du modèle

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

Buts de conception de MVC

• Chaque brique peut être remplacée par votre propre implémentation

Extensibilité

Controller Builder

Controller Factory

Controller

View Engine

View

Controller

Action Invoker

Action Result

Action Filters

Model Binders

• 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

• 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

Asp.Net MVC en français

Recommended