SPIKE: Analyse af modernisering af LSS til .NET 6

Overordnet beskrivelse:
Det skal undersøges, hvad der skal til for at få LSS til at køre på .Net 6. De åbenlyse konsekvenser er følgende:

  • Alle referencer til Dfdg.Foundation skal fjernes og eventuelt udskiftes med Star.Foundation

  • Dfdg.ServiceGateway skal køre .Net Standard 2.0

  • Webprojektet skal konsekvensrettes til at køre .Net 6 med dertilhørende rettelser til Startup mv.

Denne spike indeholder en liste over de findings, som der er sket under analysen, samt bud på hvor omfattende de givede løsningsforslag er.

Målgruppe: FA og DFDG arkitekt

Reference: https://starwiki.atlassian.net/browse/DS-12364

Forfatter: Mads Kongsbak & Thomas Søby Ingwersen

Teknisk analyse:
Den tekniske analyse er foretaget ved at eksportere projektet over til .NET 6, og så gå igennem alle fejl man får, og hvad det kræver at løse dem. Efter egen erfaring med at sidde og rette disse fejl, er det muligt at fejlrettelser foretager uforventede fejl i andre steder i projektet, hvis det kan forudsiges er der også taget højde for det i løsningsforslagene. Der er også fejl, som ikke indgår i denne tekniske analyse, fordi de allerede er blevet løst i løbet af udførelsen af analysen. Branchen hvorpå den tekniske analyse er udført kan ses her: 2023-1/feature/lss-net6 og har et tilsvarende PR: PR 3402

Fejl

Beskrivelse

Løsningsforslag

Overslag

Fejl

Beskrivelse

Løsningsforslag

Overslag

@helper functions

@helper functions er brugt ofte i LSS, men er ikke understøttede i ASP.NET Core.

Disse @helper functions kan omskrives til @functions, hvorpå functionerne virker som før. En lignende omskrivelse kan ses i funktionen TaxItemFieldValue i flien LandssupportWeb2\Views\EindkomstCaseworker\IncomeRegisterDetails.cshtml

1 SP

AsyncManager

Filen LandssupportWeb2\Controllers\PersonInfoController_partial_RegisterExtract.cs bruger AsyncManager, som er blevet udfaset i ASP.NET Core.

Siden AsyncManager er blevet udfaset, skal dette skrives om. Der er ikke noget library i ASP.NET Core som kan bruges istedet for, så det skal omskrives fra bunden. Siden der kun er tale om denne enkelte fil, er omskrivelsen nok ikke super omfattende.

1-2 SP

System.Web.HttpContext og System.Web.HttpApplication

System.Web er blevet udfaset i ASP.NET Core, og derfor kan HttpContext ikke tilgås på denne måde mere. System.Web.HttpApplication er også blevet fjernet.

I ASP.NET Core er der blevet tilføjet en IHttpContextAccessor, som kan bruges til at tilgå HttpContext. Siden der ikke er nogen direkte erstatning af System.Web.HttpApplication, skal dette også analyseret og der skal findes ud af, hvordan dette interface kan erstattes.

2-3 SP

IClientValidatable + ModelClientValidationRule

IClientValidatable og ModelClientValudationRule er ikke understøttet i ASP.NET Core

Under undersøgelsen var det ikke åbenlyst, hvad disse valideringsregler bliver brugt til - og om de faktisk validerede noget. Der skal nok en dybere undersøgelse til, at finde ud af præcis hvad de gør, og om de faktisk skal bruges. Hvis det viser sig, at disse valideringsregler ikke bruges, er rettelsen meget enkel.

3 SP

Manglende Attributter

Attributter såsom [ValidateInput(bool)] og [AllowHtml] er blevet fjernet i ASP.NET Core

Disse attributter bliver brugt rimelig ofte, men default behavior i ASP.NET Core er at tillade html og ikke at validere input. Efter min overbevisning kan alle attributterne fjernes, og det vil fungere på samme måde, som det gjorde før. Der skal dog analyse til, så de steder, hvor vi ikke vil tillade HTML/vi vil validere input, at det faktisk bliver valideret.

1-2 SP

Diverse Interfaces er ændret

Interfaces såsom Microsoft.AspNetCore.Mvc.Controller og Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder har ændringer i metodesignaturer

Siden der er blevet ændret i en del metodesignaturer på tværs af interfaces, som går igen i ASP.NET Core, så skal disse metoder også genimplementeres med den signatur. I største dele er der ikke tale om store ændringer de fleste steder, dog kan det komme med uforudsigelige konsekvensrettelser andre steder i projektet.

1-2 SP

CaseWorkerHelper referencer

Der er mange referencer til forskellige CaseWorkerHelper typer, som er blevet defineret i DFDG.Foundation, som er blevet fjernet grundet flytningen til .NET 6

Under analysen, blev der også fundet et par Enums, som var en del af DFDG.Foundation, som skulle genimplementeres. Dette kan ses i fx. LandssupportWeb2\Models\Enums\PersonGroupProjectTypeIdentifierEnum.cs. Alt tyder på, at det er det samme der skal til, før at CaseWorkerHelper også fungerer. Disse typer skal altså genimplementeres i LSS, fordi afhængigheden til DFDG.Foundation er fjernet.

 

1 SP

Diverse

Der findes en række fejl, som ikke optræder ofte bl.a. ift generering af zip-file og ift HtmlHelpers

Omfanget af denne type fejl er ikke særligt stort og løsningen forventes ikke at volde de store problemer

3 SP

Der skal også bemærkes, at udover disse fejl, så er DFDG.ServiceGateway også blevet lavet om til et .NET Standard 2.0 projekt. Grunden til dette er, at det er lavest fællesnævner mellem .NET Framework og .NET Core, og DFDG.ServiceGateway bliver brugt både i DFDG og i LSS. Migrationen til .NET Standard 2.0 fungerede fint, der skulle bare tilføjes en pakke i ServiceGatewayImpl i DFDG, før at det kunne builde. Denne ændring fremgår også af branchen og PR som er linket ovenfor

 

Anbefaling:
Anbefalingen er, at moderniseringen af LSS til .NET 6 skal gennemføres. At konvertere LSS fra .Net Framework til .Net 6, og derved fra ASP.NET.MVC til ASP.NET Core, kan LSS køres i Statens IT. Forhåbentlig giver denne tekniske analyse et godt grundlag for, at estimere hvor mange Story Points der skal til, for at færdiggøre overførslen til .NET 6.

En grovestimering indikerer, at der er for 13-17 SP i at omskrive LSS til .net 6. Dertil skal lægges tid til test.