A la découverte d’ASP.NET 5 (vNext) : premiers pas

Cela fait quelques temps que Microsoft en parle et c’est pour bientôt : la toute nouvelle mouture ASP.NET 5 complètement repensée pour notre bonheur.
Rappel des fonctionnalités attendues
Pour rappel, voici les principales nouveautés attendues :
- Version optimisée pour le Cloud sur les parties MVC, Web API, Web Pages, SignalR, e EF.
- Un framework unifié (MVC6) pour les parties MVC, Web API et Web Pages.
- Plus de dépendance directe à “System.Web.dll” (code plus léger et consommation mémoire réduite => on gagne théoriquement en perf).
- Une nouvelle extension project.json pour lister les dépendances et une nouvelle classe “Startup” qui remplace le fichier “global.asax”.
- Possibilité d’hébergement sur IIS ou dans un “self host”.
- Déploiement “Side-by-side” : il suffira d’uploader les dépendances dans le répertoire “bin” sans affecter les autres applications sur le même serveur.
- Injection de dépendances intégrées au framework.
- Un compilateur Roslyn pour la compilation dynamique du code (on pourra éditer le code et constater les changements sans rebuilder).
- Open source et cross-platform (fonctionnera sur Windows, Mac, Linux, etc).
Globalement, on peut s’attendre à avoir une optimisation et une amélioration des performances ainsi qu’une aisance de développement et de déploiement.
En attendant la sortie officielle, j’ai voulu savoir à quoi ressemblait VNEXT : j’ai donc téléchargé la nouvelle version de Visual Studio (en beta) et effectué quelques tests. Je vous livre dans ce billet mes premières impressions.
Url à retenir
Ça se passe ici : http://www.asp.net/vnext
Installer Visual Studio 2015 CTP
Pour l’instant, la nouvelle mouture d’ASP.NET semble faire paire avec la toute dernière version de Visual Studio. Il faudra d’ici là l’utiliser avec une version antérieure. Pour l’installation, il faudra prévoir 8Go au minimum d’espace.
Une fois installé, je décide de créer un projet de test Web. Au passage, je découvre la possibilité de créer un projet ASP.NET 5 Console (un prochain article y sera consacré bientôt). En attendant, je vais faire à mon habitude et créer un projet de type “Web Application”.
On retrouve toujours nos templates habituels des versions précédentes ainsi que 3 nouveaux templates vNext en preview. Je vais donc me lancer sur ces nouveautés “en preview” et créer un projet de type “ASP.NET 5 Preview Starter Web” afin de constater ce qui a changé.
Constat sur la nouvelle solution projet web
Je découvre une solution plus épurée que les versions précédentes avec quelques nouveautés comme :
- un fichier de type “dependencies”
- un fichier “global.json”
- des fichiers de configuration en “json” pour la plupart.
Le MVC est toujours là
Je constate que j’ai toujours mes dossiers Models, views et Controllers : sur ce point je ne suis pas dérouté.
Plus de fichier Global.asax
Plus de “Global.asax” et le dossier “App_Start” n’est plus là. Par contre, j’ai un nouveau fichier “Startup.cs” qui semble être notre point de démarrage de l’application. Le nom du fichier me paraît plus adapté en tout cas :).
Grunt, Bower et npm
Là j’ai envie de dire : Wow ! la gestion de packages pour le web, de minification des css/js, de transformation des fichiers type LESS, SASS, coffeeScript et autres templates type “HandleBar”, tout cela intégré en natif dans le projet : je dis chapeau. On pourra donc profiter de tous ces outils tiers orientés développement “FRONT-END” pur, et très répandus dans le monde libre ainsi que dans d’autres technos web (je pense notamment à Node.js, aux SPAs, etc).
Scott Hanselman a publié un article intéressant à ce sujet ici.
Exécution classique du site
En attendant d’aller plus loin, j’exécute (F5) mon projet sous IIS Express afin de m’assurer que tout fonctionne correctement comme à l’accoutumée : ma page s’affiche ; je suis rassuré, on pourra donc continuer à développer comme d’habitude.
Je vais donc aller plus loin et analyser ma nouvelle solution afin de me familiariser un peu avec ce nouveau template pour constater ce qui a changé.
Les références
Au niveau des références du projet, je peux toujours faire mon “clic droit” => “Add references” mais je constate que je ne peux qu’ajouter des références projets (de ma solution) ainsi que les assembly .NET disponibles. Cependant, je ne peux plus faire un “Browse” pour récupérer manuellement une dll tiers. En constatant cela, je me dis que cela a pour but d’éviter les ennuis de références, et surtout pour unifier la gestion des références.
Pour les packages Nuget par exemple, il suffit de rajouter manuellement le nom du package voulu dans le fichier “project.json” à la section “dependencies“, et l’intellisense nous aide directement, avec la possibilité notamment de sélectionner la version voulue. Cela me paraît assez intuitif : ça me va. Jusque là, j’adhère.
Le web.config a disparu
A la place du web.config, je me retrouve avec un fichier “config.json” contenant notamment ma “ConnectionString”. A première vue, cela semble plus propre car je n’ai pas, comme dans “web.config”, une multitude de sections grandissantes rendant parfois illisible le fichier de configuration. Les références spécifiques de dll se retrouvent par défaut dans un autre fichier (project.json). Cela dit, rien ne m’empêche en théorie de faire grossir à nouveau ce fichier config.json. Nous verrons par la suite ce qu’il en est.
La section “wwwroot”
On retrouve une nouvelle section “wwwroot” qui visiblement sera la cible lors du déploiement de notre application. Elle contient toute la partie cliente (css, images, librairies Js, etc). Ce découpage me plaît bien, car il isole clairement la partie Front (éléments de design pur).
Nouveauté ergonomique dans VS
En essayant de mettre un point d’arrêt, j’ai constaté une nouveauté : la possibilité de mettre directement une “condition” ou une “action” à effectuer. Cette fonctionnalité existait déjà mais pas directement en option sur le “point d’arrêt”. Globalement, cela me semble plus ergonomique et me donne plus envie de l’utiliser.
J’ai également découvert une meilleure présentation des descriptions sur les éléments au survol (tooltip) de mon code que j’ai trouvé assez bien faite (description, couleur, ergonomie).
Conclusion
Pour l’instant, j’ai envie de dire qu’on est pas vraiment dérouté par rapport aux versions précédentes d’ASP.NET MVC (en tout cas, pas pour le template de création de site web MVC). Mieux, j’ai même l’impression que les fichiers sont mieux rangés dans le template par défaut, et surtout on remarque une réelle amélioration ergonomique globale (auto-complétion sur les packages, nomenclatures des fichiers, description des classes, etc). A l’usage, on est plus à l’aise en moins d’une journée d’utilisation.
L’utilisation des extensions JSON me plaît bien, étant très familier avec ce format.
L’intégration des composants orientés “Front” pur tel que GRunt, Bower et npm me conforte dans l’idée d’expansions de possibilités et d’organisation des modules du code.
Cette nouvelle mouture d’ASP.NET 5 semble, à première vue, nous promettre beaucoup d’améliorations et globalement plus de simplicité d’usage.
Dans mon prochain article, nous allons étudier plus en détails toutes ces nouvelles fonctionnalités promises et voir ce qui se passe réellement quand on “soulève le capot” de vNext.
A bientôt