Modernizzazione .NETOgni stack di questo elenco, portato in produzione
Il .NET legacy non è un unico problema. Un’app WebForms, uno strato di servizi WCF e un client WinForms si bloccano per motivi completamente diversi, e una stima vale quanto l’esperienza di chi in quello stack ci ha vissuto davvero. Abbiamo scritto codice di produzione in tutti, compresi quelli in VB.NET che nessuno vuole aprire, quindi la valutazione attinge alla memoria invece che a una fase di ricerca pagata da voi.
2002 – 2012ASP.NET WebForms↳ASP.NET Core con Razor Pages o Blazor
Il ciclo di vita della pagina, il ViewState e i server control non hanno equivalenti, quindi il markup va davvero riscritto. La logica di business sottostante di solito no, e separare le due cose è gran parte del lavoro.
2003 – 2010Servizi ASMX e WCF↳API ASP.NET Core, gRPC o CoreWCF
Binding, behavior e contratti SOAP non si portano. Dove i chiamanti sono terze parti che non potete cambiare, CoreWCF mantiene in vita il contratto mentre tutto ciò che c’è dietro si sposta.
2007 – 2015Client Silverlight e basati su plugin del browser↳Un front end web o un’app mobile
Non c’è niente verso cui migrare: il runtime è sparito da tutti i browser. Questi progetti iniziano con una conversazione di scoping su ciò che l’applicazione doveva davvero fare.
2008 – 2019DataSet, EF6 e ADO.NET scritto a mano↳EF Core, o Dapper dove se lo guadagna
Il livello dati è dove un porting lineare diventa costoso. Traduzione delle query, transazioni e lazy loading si comportano tutti in modo diverso, e le differenze emergono in produzione, non in compilazione.
2009 – 2016ASP.NET MVC 5 e Web API 2↳ASP.NET Core MVC
La cosa più vicina a un porting meccanico in questo elenco. Il vero lavoro sono hosting, configurazione, dependency injection e pipeline dei middleware, non i vostri controller.
2002 – oggiWinForms e WPF↳.NET desktop attuale, o MAUI se deve stare su un telefono
Entrambi girano ancora sul .NET moderno, quindi raramente si tratta di una riscrittura. A bloccarla sono le suite di controlli di terze parti abbandonate e l’interop COM, che è la prima cosa che andiamo a cercare.
Qualsiasi versioneLibrerie di classi .NET Framework↳.NET attuale, in multi-targeting durante il passaggio
Le librerie condivise sono ciò che permette al vecchio e al nuovo sistema di funzionare fianco a fianco. Portarle prima in multi-targeting è di solito la chiave che sblocca tutto il resto di questo elenco.
Semprepackages.config, csproj legacy, IIS su Windows Server↳Progetti in stile SDK, container, CI che va da sola
Poco appariscente, ed è ciò che rende ripetibile tutto il resto. Ripaga anche molto prima che la migrazione finisca, ed è per questo che spesso è la cosa giusta da fare per prima.
Niente riscritture in un colpo solo
Niente di questo elenco viene sostituito in un unico rilascio. Lo schema che funziona è lo strangler: si mette in piedi il nuovo stack accanto al vecchio, si sposta una porzione alla volta dietro gli stessi URL e si tengono attivi entrambi finché dal lato vecchio non resta più nulla. Sulla carta sembra più lento, ed è l’unica versione che abbiamo visto arrivare in fondo.