|
|
Entrez dans la WebMatrix v0.6 par Thomas GIL (thomas.gil@valtech.fr) |
|
|
|
|
|
Aujourd'hui, dimanche 15 juin 2003, sort la nouvelle version de l'outil WebMatrix, développé par Microsoft. Cet environnement de développement Web est efficace, robuste, gratuit et léger. Sa gratuité tend à démocratiser l'accès aux technologies .NET auprès des utilisateurs : en ce sens, WebMatrix s'inscrit dans la lignée de produits de plus en plus compétitifs tels que :
Dans la plupart des projets, les développeurs peuvent se "contenter" d'installer cette panoplie d'outils gratuits et ainsi alléger le coût global de construction des applications .NET !
Nous entendons depuis quelques semaines Microsoft et Borland faire la promotion de leurs outils intégrés, respectivement VisualStudio.NET et C#Builder; il est donc facile de mal comprendre le message et de penser que pour créer de véritables applications .NET, il faut se munir d'un environnement coûteux et qu'il est indispensable d'installer le système Windows.
Il est donc rassurant de savoir que l'on peut tout à fait implémenter avec un outillage gratuit toutes les couches des applications distribuées modernes (visualisation, présentation, service, métier, accès aux données). WebMatrix, comme nous allons le voir, remplit de manière très honorable son contrat : il permet d'implémenter la couche de présentation Web des applications .NET.
Nous vous proposons à travers ce bref article de faire un tour d'horizon de ce produit, à notre sens très prometteur, et de mettre l'accent à la fois sur ses atouts (même vis-à-vis de VS.NET et C#Builder) et sur ses lacunes résiduelles.
WebMatrix se télécharge gratuitement sur le site www.asp.net (cf. adresse complète dans les ressources). Après une installation sans surprise, on a le plaisir de découvrir un environnement convivial, respectant les habitudes des utilisateurs de VisualStudio.NET ou de C#Builder :
|
|
Le premier réflexe qui démange est bien entendu de créer une nouvelle page ASP.NET. Et à nouveau, on se sent immédiatement "chez soi" dans l'interface graphique de conception de pages ASPX; des onglets permettent de faire la part de choses entre les composants HTML et les WebControls ASP.NET (on retrouve sans surprise la liste des contrôles disponibles dans le namespace System.Web.UI.WebControls) :
|
|
Jusque là, aucun problème. L'innovation a été écartée dans cette partie de l'outil, au profit d'une manipulation quasiment identique à celle que nous aurions faite dans VisualStudio.NET. Résultat, tout développeur ASP.NET est à même de développer la partie graphique de ses pages en quelques minutes. L'investissement qu'a constitué l'apprentissage d'autres outils .NET est rentabilisé.
Un petit détail technique nous a séduits : contrairement à son grand frère VS.NET, WebMatrix choisit de placer le développeur en mode "FlowLayout" par défaut, au lieu du "GridLayout". Vous le savez déjà, nous préférons de loin le premier mode, dans lequel les pages Web se redimensionnent dynamiquement en fonction de la taille de la fenêtre du navigateur (et en fonction de la résolution de l'écran de l'internaute). L'autre mode, GridLayout, est séduisant pour les habitués de VisualBasic 6 (positionnement absolu des composants graphiques) mais ne respecte pas la philosophie du Web : les applications seraient développées pour une cible beaucoup trop restrictive.
Une fois notre page conçue, il suffit d'une pression sur F5 pour la voir s'exécuter. Mais derrière cette magie (que les utilisateurs de la version précédente de WebMatrix connaissent déjà) se cache une subtilité : le serveur Web qui exécute notre application Web peut être :
Ce dernier point signifie que sur n'importe quel poste de développement (même sous Windows 98), il est tout à fait possible de concevoir et tester nos applications ASP.NET.
Comme nous l'avons vu, la conception graphique de pages ASP.NET ne pose aucun problème dans WebMatrix. Intéressons-nous maintenant à l'interaction entre les utilisateurs et les pages; comme dans les autres environnements, il suffit, pour réagir à un clic sur le bouton de soumission de notre petit formulaire, de double-cliquer sur ce composant dans le concepteur graphique. Le résultat, cette fois, n'est pas de très bonne augure :
|
|
Pour les lecteurs qui trouvent que le qualificatif "pas très bonne augure" est un peu fort, passons dans l'onglet "All", qui montre la totalité du code de la page ASP.NET :
|
|
Eh oui, tout le code C# (ou VB.NET ou J#, en fonction des choix faits lors de la création de la page) se trouve dans la page ASPX elle-même, confiné dans une balise <script>.
Cela signifie que WebMatrix ne tire pas du tout parti des classes "CodeBehind" qui sont pourtant un outil indispensable à la séparation des responsabilités. De ce fait, la même page est responsable de la présentation et de la gestion du dialogue avec l'utilisateur, activités qui peuvent être menées par des rôles différents sur un projet et qui doivent donc être désolidarisées en deux composants distincts.
Bien entendu, rien n'empêche (dans SharpDevelop par exemple) de développer une Assembly contenant toutes les classes nécessaires au fonctionnement du site Web, dont les CodeBehind, et de n'utiliser WebMatrix que pour gérer la partie présentation. Mais on regrettera alors qu'il n'y ait aucun couplage entre les outils de développement des couches présentation et session, ce qui risque de mener à de petits problèmes de maintenance en cohérence des CodeBehind et des pages ASP.NET.
Même si l'on accepte, à contrecoeur, de taper du code dans l'environnement <script> de la page ASPX, on s'arrête bien vite; l'éditeur C# de WebMatrix est très pauvre : il ne propose pas de complétion automatique, pas de remise en forme automatique, ne parlons même pas de refactorings... Bref, c'est un éditeur dont le seul lien avec C# est d'offrir la coloration syntaxique pour ce langage. Nous sommes donc loin, pour l'édition de code, de ce qu'offrent VS.NET, C#Builder ou SharpDevelop !
L'accès à une base de données relationnelle est le point fort de WebMatrix, surpassant même certaines possibilités de VisualStudio.NET !
Tout d'abord, disons que cet outil permet d'accéder à 3 types de bases de données :
Bien entendu, il faut que la base de données existe avant que l'on s'y connecte via l'onglet "Data" de WebMatrix. Mais tout le reste peut bien être fait dans l'IDE :
Mais la plus belle réussite (amateurs de développement d'application "Quick and Dirty", vous allez apprécier) concerne l'intégration des données provenant d'une base dans une page ASP.NET. Vous n'êtes pas sans savoir (nous l'aurions bien vu si nous avions utilisé VisualStudio.NET) qu'il faut procéder à plusieurs étapes avant d'arriver à l'affichage du résultat d'une requête SQL dans une page ASPX. Concrètement, il faut :
Dans WebMatrix, il n'en est rien : un simple glisser-déposer de la table cible dans l'onglet Data vers l'environnement de conception graphique de notre page ASP.NET suffit ! Les évangélistes de Microsoft ont de belles démos "bluffantes" devant eux ! Jugez plutôt :
|
|
Et le tour est joué.
Mais à y regarder de plus près, on se rend compte que le composant affiché n'est pas une DataGrid standard mais un contrôle utilisateur spécifique, développé par l'équipe de WebMatrix : la MxDataGrid. De même, un second composant (responsable de la connexion à la base de données et de l'exécution des requêtes) a été ajouté à la page : un AccessDataSourceControl.
Après avoir été séduits, nous avons pris peur : ces contrôles sont propriétaires à WebMatrix; aurons-nous le droit de les utiliser en production, et dans quelles conditions ? Mais la réponse de l'éditeur élimine toute crainte : ces contrôles sont disponibles et redistribuables gratuitement.
Il se trouve même que ces fameux contrôles (surtout la MxDataGrid) offrent de manière automatique ce que la DataGrid standard ne savait pas faire : la pagination et le tri sur une colonne de la grille. La configuration de ces options est triviale et se fait par le biais de la fenêtre de propriétés (propriétés AllowSorting, AllowPaging et PageSize).
Il est donc possible, en moins d'une minute, d'avoir grâce à WebMatrix une belle page ASP.NET qui présente le résultat d'une requête SQL sur une table de la base de données, et qui gère la pagination et le tri automatiquement.
Plus sérieusement, nous sommes persuadés que le composant MxDataGrid simplifie l'usage de la DataGrid (typiquement les aspects tri et pagination). Mais dans un site qui devient complexe, nous vous déconseillons évidemment cette approche : certes elle est très directe mais elle ne permettra pas de rationaliser la gestion des modifications des données, ni même de représenter les informations sous forme d'un modèle d'objets métier. Une architecture à consommer avec modération, donc, même si l'outillage est vraiment irréprochable ! Bravo !
Les paragraphes précédents nous ont permis de dégrossir l'essentiel de WebMatrix : le développement et le test de pages ASP.NET, ainsi que l'accès direct à une base de données. Mais comme dans tout outil, il existe autour de ce noyau dur un ensemble de petits assistants ou d'outils satellites; sans les classifier de manière formelle, nous vous présentons ici ceux de ces outils qui nous ont séduits.
Etant habitués à VisualStudio.NET, nous nous attendions bien sûr à pouvoir concevoir des UserControls (ASCX) dans WebMatrix. Nous avons donc fait de notre formulaire d'authentification un nouveau contrôle utilisateur : "Login.ascx".
Une fois développé, nous avons naturellement cherché à glisser-déposer ce contrôle dans le contexte de la page "NewPetShop.aspx". Quelle n'a pas été notre surprise ! Jugez plutôt :
|
|
Non, vous ne rêvez pas : le contrôle ne devient pas une boîte grise opaque dans l'environnement de conception de la page mais nous avons bel et bien un aperçu fidèle (WYSIWYG) de ce à quoi ressemblera le contrôle à l'exécution. Cela permet de se faire une idée du look, mais aussi de la taille du contrôle et ainsi d'avoir moins de surprises d'inadaptation d'impédance graphique entre la charte graphique des contrôles et de la page d'agrégation. Une belle réussite, car tous les environnements de développement n'offrent pas (encore) cette fonctionnalité !
Pas de révolution sur la forme : WebMatrix permet lui aussi d'ajouter de nouveaux contrôles utilisateur, qu'ils aient été développés par Microsoft ou par une équipe interne à une société utilisatrice.
Non, ce n'est pas la forme mais le fond qui est tout simplement génial : WebMatrix a la faculté de découvrir la liste des composants disponibles par l'invocation d'un WebService ! Puis, lorsqu'il est invité à installer le composant de notre choix, il le télécharge et procède dynamiquement à son intégration dans l'onglet sélectionné. Graphiquement, cela donne la boîte de dialogue suivante :
|
|
Il est même possible, avant installation, d'avoir un aperçu du contrôle au runtime. Cela permet de se faire une idée :
|
|
Vous vous dites peut-être que la mécanique interne de WebMatrix pour gérer ses contrôles utilisateur ne regarde pas ses utilisateurs. C'est vrai, mais nous y voyons toutefois une opportunité exceptionnelle : étant donné que WebMatrix se comporte comme un client WebService, et que l'adresse de ce service peut être précisée au navigateur de contrôles, rien ne nous empêcherait de développer notre propre WebService de gestion d'un catalogue de contrôles !
L'enjeu est fondamental : pour accéder à un niveau correct de réutilisation, il faut bien entendu développer les contrôles réutilisables, mais aussi les documenter, les gérer en version et en configuration, et enfin offrir aux développeurs les outils permettant de trouver les contrôles adaptés à leurs besoins et d'installer ces contrôles dans leur environnement de développement favori.
En tirant parti des WebServices pour la recherche / installation des composants, WebMatrix offre un faible couplage vis-à-vis du système de gestion des composants (que l'on appelle généralement un repository ou un catalogue de composants).
Ce qui serait vraiment génial, maintenant que toute l'infrastructure est prête, ce serait de développer côté serveur un WebService qui soit la façade d'un gestionnaire de configuration (CVS par exemple...), et qui permettrait d'obtenir à la volée la dernière version du composant et la liste à jour de tous les composants. Avis aux amateurs !
A noter que ce genre d'outil n'est pas nouveau, puisque Microsoft propose depuis plusieurs années un repository de composants (COM/ActiveX) doté d'un moteur de recherche et de gestion de versions. Mais ici, grâce aux WebServices, on peut tout à fait imaginer de naviguer sur des catalogues de composants (gratuits ou commerciaux) situés n'importe où sur le Web, implémentés sur n'importe quel système (OS + langage + gestionnaire de configuration) ! Le rêve devient réalité...
Moins impressionnant que l'ajout de contrôles à la carte via WebServices, mais tout aussi utile : WebMatrix propose dans son onglet "Classes" un moteur de recherche très simple et très efficace sur les classes du framework .NET. Il nous permet d'avoir une vue logique (orientée Namespaces) ou physique (orientée Assemblies) de l'ensemble des classes standard .NET ainsi que des classes fournies gracieusement par WebMatrix.
|
|
WebMatrix atteint sa version 0.6, le produit est globalement mûr, mais il reste quelques points sur lesquels il est perfectible. Bien sûr, la critique est facile; aussi préférons-nous la formuler comme une "WishList", un ensemble de voeux adressés à l'équipe de développement de WebMatrix pour la prochaine version...
Les éditeurs (graphique et de code source) HTML / ASPX / ASCX sont de très bonne facture. Dès la prise en main, on s'y sent très à l'aise, les manipulations sont intuitives et naturelles. Nous avons même eu l'ambition de rédiger cet article dans WebMatrix; malheureusement, après quelques lignes, nous avons eu deux problèmes majeurs :
Nous l'avons déjà mentionné : l'éditeur de code (C#, J# ou VB.NET) ne dispose pas de complétion automatique ni de reformatage automatique. Il est donc très limité pour la production de classes (métier, service, accès aux données), et l'on préfèrera généralement l'utilisation de SharpDevelop pour cette partie-là. Le seul hic est que WebMatrix et SharpDevelop ne sont pas intégrés, rien n'est prévu pour les utiliser conjointement... Cet effort d'intégration repose donc sur les développeurs.
Enfin, bien que WebMatrix propose de créer des documents XML, des feuilles de styles CSS et XSLT, des scripts SQL... les assistants ne feront que créer un squelette du fichier en question. L'édition se fait ensuite dans un éditeur proche de Notepad, sans coloration syntaxique ni complétion automatique. Autant dire qu'il vaut mieux se tourner vers d'autres outils pour éditer ce genre de documents (par exemple XML Cooktop pour XML et XSLT).
Grandeur et décadence du Web : toute la documentation de l'outil, du framework .NET, et les tutoriaux concernant les ASP.NET se trouvent exclusivement en ligne. Nous avons donc regretté que l'installation ne propose pas de faire une copie de la documentation nécessaire sur le disque dur du poste de développement, ce qui aurait permis à un poste non connecté au Web de consulter la documentation (et même pour les postes connectés, l'accès à l'information n'en serait que plus rapide).
WebMatrix 0.6 est un outil gratuit tout à fait suffisant pour développer la couche de présentation Web (ASP.NET) d'une application .NET. Il permet également de bâtir des prototypes ou des applications jetables dans lesquelles les pages ASPX (ou les contrôles ASCX) accèdent directement à une base de données relationnelle. Pour ces aspect, il dépasse sur certains points les environnements de développement intégrés commerciaux (VisualStudio.NET et C#Builder).
La gestion de composants réutilisables de WebMatrix, ouverte, souple et efficace, devrait inspirer de nombreux environnements de développement ! Nous y voyons un enjeu important tant en termes de gestion d'un catalogue de composants d'entreprise qu'en termes commerciaux : les sociétés éditrices de composants auront fort à gagner d'offrir un ensemble de composants en évaluation à travers un WebService compatible avec WebMatrix...
Par contre, il ne faut pas espérer développer la totalité d'une application multi-niveaux dans WebMatrix : pour les couches de Service, Métier et Accès aux données, d'autres outils sont bien plus adaptés (en particulier : SharpDevelop, Eclipse avec son plug-in C#, et bien entendu les IDE commerciaux VS.NET et C#Builder). Une bonne idée serait de proposer un intégration entre WebMatrix et SharpDevelop, surtout sur la gestion des événements utilisateurs qui doit à notre sens être réalisée dans des classes CodeBehind. Un double-clic sur un bouton devrait idéalement créer le CodeBehind associé à la page ASPX, et l'ouvrir dans SharpDevelop... Qui sait ? Ce sera peut-être la surprise qui nous attend dans la version 0.7 ?
WebMatrix : http://asp.net/webmatrix/download.aspx
Projet Mono : http://www.go-mono.com
#Develop : http://www.icsharpcode.net/OpenSource/SD/Default.aspx
Auteur : Thomas GIL
Copyright Juin 2003