Modernizacja .NETKażdy stos z tej listy wdrażaliśmy produkcyjnie
Legacy .NET to nie jeden problem. Aplikacja WebForms, warstwa usług WCF i klient WinForms utykają z zupełnie różnych powodów, a wycena jest tak dobra, jak doświadczenie osoby, która naprawdę pracowała w danym stosie. Pisaliśmy produkcyjny kod we wszystkich z nich — łącznie z tymi w VB.NET, których nikt nie chce otwierać — więc ocena to kwestia wiedzy, a nie etapu badań, za który Państwo płacą.
2002 – 2012ASP.NET WebForms↳ASP.NET Core z Razor Pages lub Blazor
Cykl życia strony, ViewState i kontrolki serwerowe nie mają odpowiedników, więc znaczniki rzeczywiście trzeba przepisać. Logiki biznesowej pod spodem zazwyczaj nie — a rozdzielenie tych dwóch warstw to większość pracy.
2003 – 2010Usługi ASMX i WCF↳API w ASP.NET Core, gRPC lub CoreWCF
Bindingi, behaviory i kontrakty SOAP nie dają się przenieść. Gdy wywołującymi są podmioty zewnętrzne, których nie można zmienić, CoreWCF utrzymuje kontrakt przy życiu, podczas gdy wszystko za nim jest przenoszone.
2007 – 2015Silverlight i klienci oparci na wtyczkach przeglądarki↳Front-end webowy lub aplikacja mobilna
Nie ma do czego migrować — środowisko uruchomieniowe zniknęło ze wszystkich przeglądarek. Takie projekty zaczynają się od rozmowy o tym, co aplikacja faktycznie miała robić.
2008 – 2019DataSety, EF6 i ręcznie pisane ADO.NET↳EF Core lub Dapper tam, gdzie się opłaca
To warstwa danych sprawia, że prosta migracja robi się droga. Translacja zapytań, transakcje i lazy loading działają inaczej, a różnice wychodzą na produkcji, a nie podczas kompilacji.
2009 – 2016ASP.NET MVC 5 i Web API 2↳ASP.NET Core MVC
Najbliższe mechanicznej migracji na tej liście. Prawdziwa praca to hosting, konfiguracja, wstrzykiwanie zależności i pipeline middleware — nie Państwa kontrolery.
2002 – dziśWinForms i WPF↳Aktualny .NET na desktop lub MAUI, jeśli aplikacja powinna trafić na telefon
Obie technologie nadal działają na nowoczesnym .NET, więc rzadko oznacza to przepisywanie. Blokadą są porzucone zestawy kontrolek firm trzecich i interop COM — tego szukamy w pierwszej kolejności.
Dowolna wersjaBiblioteki klas .NET Framework↳Aktualny .NET, z multi-targetingiem na czas przejścia
To współdzielone biblioteki pozwalają staremu i nowemu systemowi działać równolegle. Włączenie w nich multi-targetingu jako pierwszy krok zwykle odblokowuje wszystko inne na tej liście.
Na bieżącopackages.config, stary format csproj, IIS na Windows Server↳Projekty w stylu SDK, kontenery, CI, które działa samo
Mało efektowne, ale to dzięki temu reszta staje się powtarzalna. Zwraca się też na długo przed końcem migracji — dlatego często warto od tego zacząć.
Bez przepisywania wszystkiego naraz
Nic z tej listy nie jest wymieniane jednym ruchem. Sprawdza się wzorzec strangler: nowy stos staje obok starego, przenosimy po jednym fragmencie za tymi samymi adresami URL i utrzymujemy oba, dopóki po starej stronie nic nie zostanie. Na papierze wygląda to na wolniejsze, ale to jedyna wersja, którą widzieliśmy doprowadzoną do końca.