Modernisation .NETChaque technologie de cette liste, livrée en production
Le .NET hérité n’est pas un problème unique. Une application WebForms, une couche de services WCF et un client WinForms bloquent chacun pour des raisons totalement différentes, et une estimation ne vaut que l’expérience réelle de celui qui la fait sur cette technologie. Nous avons écrit du code de production avec chacune d’elles, y compris en VB.NET que personne ne veut ouvrir : l’évaluation relève donc du savoir acquis, pas d’une phase de recherche que vous financez.
2002 – 2012ASP.NET WebForms↳ASP.NET Core avec Razor Pages ou Blazor
Le cycle de vie des pages, le ViewState et les contrôles serveur n’ont pas d’équivalent : le balisage est donc réellement réécrit. La logique métier qu’il recouvre, en général non, et l’essentiel du travail consiste à séparer les deux.
2003 – 2010Services ASMX et WCF↳API ASP.NET Core, gRPC ou CoreWCF
Les bindings, behaviors et contrats SOAP ne se portent pas. Quand les appelants sont des tiers que vous ne pouvez pas modifier, CoreWCF maintient le contrat pendant que tout ce qui se trouve derrière migre.
2007 – 2015Silverlight et clients à plugin navigateur↳Un front-end web ou une application mobile
Il n’y a rien vers quoi migrer : le runtime a disparu de tous les navigateurs. Ces projets commencent par une discussion de cadrage sur ce que l’application devait réellement faire.
2008 – 2019DataSets, EF6 et ADO.NET fait maison↳EF Core, ou Dapper quand il se justifie
C’est dans la couche de données qu’une migration simple devient coûteuse. Traduction des requêtes, transactions et chargement différé se comportent tous différemment, et cela se manifeste en production plutôt qu’à la compilation.
2009 – 2016ASP.NET MVC 5 et Web API 2↳ASP.NET Core MVC
Ce qui se rapproche le plus d’une migration mécanique dans cette liste. Le vrai travail porte sur l’hébergement, la configuration, l’injection de dépendances et le pipeline de middlewares, pas sur vos contrôleurs.
2002 – aujourd’huiWinForms et WPF↳.NET desktop actuel, ou MAUI si l’application a sa place sur un téléphone
Les deux tournent toujours sur le .NET moderne : c’est donc rarement une réécriture. Ce qui bloque, ce sont les suites de contrôles tierces abandonnées et l’interopérabilité COM, et c’est la première chose que nous cherchons.
Toutes versionsBibliothèques de classes .NET Framework↳.NET actuel, en multi-ciblage pendant la migration
Les bibliothèques partagées sont ce qui permet à l’ancien et au nouveau système de tourner côte à côte. Les passer d’abord en multi-ciblage est généralement ce qui débloque tout le reste de cette liste.
En continupackages.config, anciens csproj, IIS sur Windows Server↳Projets de style SDK, conteneurs, CI qui tourne toute seule
Peu glorieux, mais c’est ce qui rend le reste reproductible. Cela porte aussi ses fruits bien avant la fin de la migration, c’est pourquoi c’est souvent la bonne chose à faire en premier.
Pas de réécriture en big bang
Rien sur cette liste n’est remplacé d’un seul coup. L’approche qui fonctionne, c’est l’étrangleur (strangler pattern) : mettre en place la nouvelle pile à côté de l’ancienne, migrer une tranche à la fois derrière les mêmes URL, et faire tourner les deux jusqu’à ce qu’il ne reste plus rien côté ancien. Sur le papier, cela paraît plus lent, et c’est la seule version de ce type de projet que nous ayons vue aboutir.