Hva er greia med web­utvikling i .NET?

Hvorfor? Hvordan? Og kan man bruke Mac? Vi stiller Tobias Thorstensen alle de dumme .NET-spørsmålene.

Tobias Thorstensen driver med webutvikling i .NET. 📸: Privat
Tobias Thorstensen driver med webutvikling i .NET. 📸: Privat Vis mer

I kode24 sin serie «Hva er greia med..?» stiller vi de dumme spørsmålene, så du slipper. Og den siste tida har vi stadig hørt Microsoft-fans messe om at de bruker .NET til webutvikling, men hvordan funker det egentlig?

"Free. Cross-platform. Open source. A developer platform for building all your apps", skriver Microsoft om .NET på sine sider, men hva betyr egentlig det?

Og hvordan bruker man en app-platform til webuvikling? Vi blir forvirra...

Derfor tar vi heller en prat med .NET-utvikler Tobias Thorstensen i Knowit for å få en grundigere forklaring.

Så, Tobias, kan man egentlig bruke .NET til webutvikling?

Ja, definitivt! Man har kunnet utvikle for web siden 2002 i .NET.

Utfordingen har vært at rammeverkene var avhengig av teknologi som kun kjørte på Windows-plattformen inntil .NET Core ble lansert i 2016.

Hva er egentlig .NET? Og hva i all verden er .NET Core?

For å forstå hva .NET er, kan det være greit med en liten oppklaring.

.NET Core er historie fra november 2020, da Microsoft velger å fjerne "Core" og kun kalle det for .NET.

.NET er en gratis, kryssplattform og open source utviklingsplatform for å bygge ulike applikasjoner.

Disse applikasjonen kan være skrevet for web, mobil, desktop, spill eller IoT-dingser. Og man kan skrive .NET-applikasjoner med ulike programmeringsspråk hvor de mest populære språkene er C# og F#.

Man har også muligheten til å skrive i Visual Basic, om det faller i smak.

Så .NET er altså en plattform, med flere bibliotek og rammeverk. Men hva finnes for webutvikling?

ASP.NET er rammeverket for å jobbe med webutvikling i .NET. Der har man muligheten til å utvikle med ASP.NET MVC eller ASP.NET Razor Pages.

Mange er nok kjent med MVC-pattern-et. (M)odel definerer datastrukturen, (V)iew spesifiserer presentasjonslogikken og (C)ontroller prater med eksterne tjenester som databaser eller andre grensesnitt og returnerer det korrekte view-et basert på en adresse. Fordelen med dette er at man får en oppdeling av presentasjonslogikk og forretningslogikk.

«Microsoft har også et alternativ til de som ønsker å eksperimentere med WebAssembly.»

ASP.NET Razor Pages, i motsetning til MVC, grupperer filer basert på formål og hvilket problem de løser, fremfor hva de tilbyr.

For å ta et eksempel: ASP.NET MVC knytter Model, View og Controller sammen basert på navnkonvensjon, i Razor Pages må en spesifisere hvilken Model man ønsker å benytte seg av. Felles for begge er at man fortsatt skriver presentasjonslogikken i HTML og CSS.

For å binde til data benytter man seg av Razor Syntax.

Microsoft har også et alternativ til de som ønsker å eksperimentere med WebAssembly, som kalles Blazor. Det installeres som et tillegg til ASP.NET gjennom pakkehåndteringsverktøyet NuGet.

Aha! Så det er ASP.NET man bruker til webutvikling. Hvilke fordeler gir ASP.NET over andre rammeverk?

Jeg tenker at alle språk og rammeverk har sine fordeler, ulemper og sjarm. Den største fordelen, slik jeg ser det, i likhet med React og Angular, er at ASP.NET Core er open source, backet av et stort selskap som har interesse av å videreutvikle teknologien.

ASP.NET ligner nok litt mer på Angular enn React når det kommer til å definere det som et rammeverk fremfor et bibliotek. Jeg anser dette som positivt, gitt at man har muligheten til å bytte ut implementasjoner i et ellers "opinionated" rammeverk. For å konkretisere er det for eksempel mulig å bytte ut IoC-containeren og man kan skrive filter, actions og middleware til HTTP-pipelinen.

ASP.NET Core tilfører ikke noe banebrytende i forhold til andre rammeverk og biblioteker, men som C#-utvikler finner jeg det mye lettere å fortsette i samme spor uten context-switching mellom språk på backend og frontend. Tror nok de fleste kan være enig i det, uavhengig av språk og plattform.

Utover det skal jeg være forsiktig med å veie opp ASP.NET og C# mot React, Angular, Ruby, Typescript og Javascript, da alle har sine prefererte måter å gjøre ting på.

Så du skriver altså både frontend og backend i ASP.NET?

Ja, du kan skrive både frontend og backend i ASP.NET.

På mitt nåværende prosjekt har vi kun skrevet backend i ASP.NET Core 3.1. Vi benytter oss da av C# som programmeringsspråk.

Man kan også skrive JavaScript i HTML-en, ved å putte de i -tags, til for eksempel Ajax-kall. Men jeg er usikker på om det er noen som faktisk gjør akkurat dette, fremfor å bare skrive denne logikken i C#.

«Er man ikke så fan av et visuelt brukergrensesnitt tilbys de samme funksjonene gjennom Azure og .NET CLI.»

Microsoft har jo også sin egen skyplatform, Azure. Gir ASP.NET noen fordeler der?

Ja, definitivt.

Benytter man seg av Visual Studio i tillegg, får man en meget god brukeropplevelse som gjør det veldig lett å deploye en app til Azure, med svært få klikk.

Er man ikke så fan av et visuelt brukergrensesnitt tilbys de samme funksjonene gjennom Azure og .NET CLI, med henholdsvis kommandoer med az- og dotnet-prefix.

Jeg kan også legge til at det finnes god utvidelser til VS Code for å gjøre den samme jobben.

Greit, Greit. Vi gir det en sjanse! Hva trenger vi egentlig installert på maskinen vår for å sette i gang?

Det eneste man trenger er .NET SDK.

Det kan også være lurt med en IDE som for eksempel Jetbrains Rider eller Microsoft Visual Studio for PC eller Mac. Men man kan fint benytte seg av VS Code eller andre editorer, også.

Min erfaring tilsier at det kan være lurt med en IDE om man skal utvikle store prosjekter.

«Selv bruker jeg MacBook Pro.»

Hvor går vi så for å bli flinke til å kode ASP.NET?

Microsoft har en del god dokumentasjon, både for Razor pages, ASP.NET MVC, og Blazor.

Ellers har Pluralsight og Udemy en rekke gode kurs. Jeg finner også videoene til Tim Corey på Youtube veldig lærerike.

Til sist: Hva hvis man foretrekker Mac som utviklingsmaskin? Må man vinke farvel til ASP.NET, da?

Selv bruker jeg MacBook Pro og utvikler applikasjoner i .NET Core 3.0 og .NET Core 3.1. Du kan også fint bruke Linux distroer som Ubuntu eller MintOS.

Sitter du på et prosjekt som er basert på .NET Framework, derimot, har du ikke noe valg, da er det Windows som gjelder.

Men Microsoft har gode verktøy og guider på hvordan man kan konvertere en .NET Framework-applikasjon til .NET Core.