C# og .NET
C#-grunnlaget og .NET-økosystemet behandlet sammen, fra konsollprogram til fullstack-app.
C#-grunnlag
Variabler og datatyper
Ikke fullførtHva: int, string, bool, double og typesikkerhet.
Hvorfor: Grunnleggende byggeklosser i alt C#-kode.
Bør kunne: Velge riktig type for riktig data.
If/else
Ikke fullførtHva: Betinget kjøring av kode.
Hvorfor: Kjernen i all forgrening i programlogikk.
Bør kunne: Skrive lesbare betingelser uten dyp nesting.
Løkker
Ikke fullførtHva: for, foreach, while.
Hvorfor: Nødvendig for å behandle samlinger og gjentakende logikk.
Bør kunne: Velge riktig løkketype for situasjonen.
Metoder
Ikke fullførtHva: Gjenbrukbare kodeblokker med parametere og returverdi.
Hvorfor: Grunnlaget for å strukturere logikk.
Bør kunne: Skrive små metoder med ett tydelig ansvar.
Klasser
Ikke fullførtHva: Definisjoner av objekter med tilstand og oppførsel.
Hvorfor: C# er grunnleggende objektorientert.
Bør kunne: Modellere domenet ditt som klasser med riktig innkapsling.
Objekter
Ikke fullførtHva: Instanser av klasser.
Hvorfor: Slik data og logikk faktisk brukes i kjørende kode.
Bør kunne: Forstå forskjellen på referanse- og verditype.
Interfaces
Ikke fullførtHva: Kontrakter som klasser kan implementere.
Hvorfor: Muliggjør løs kobling og testbarhet.
Bør kunne: Programmere mot interfaces, ikke konkrete klasser.
Arv
Ikke fullførtHva: Gjenbruk og spesialisering av klasser.
Hvorfor: Reduserer duplisering mellom relaterte typer.
Bør kunne: Vite når arv passer bedre enn komposisjon.
Generics
Ikke fullførtHva: Typeparametrisert kode som fungerer på tvers av typer.
Hvorfor: Gir typesikkerhet uten å duplisere logikk per type.
Bør kunne: Skrive egne generiske metoder og klasser.
LINQ
Ikke fullførtHva: Spørrespråk integrert i C# for samlinger og data.
Hvorfor: Gjør datatransformasjon kortfattet og lesbar.
Bør kunne: Bruke Where, Select og GroupBy fremfor manuelle løkker.
Async/await
Ikke fullførtHva: Asynkron programmering i C#.
Hvorfor: Nødvendig for skalerbare I/O-tunge applikasjoner.
Bør kunne: Skrive async-kode uten å blokkere tråder unødvendig.
Exception handling
Ikke fullførtHva: try/catch/finally og egne unntakstyper.
Hvorfor: Forutsigbar håndtering av feilsituasjoner.
Bør kunne: Fange spesifikke unntak, ikke generiske Exception overalt.
Nullable types
Ikke fullførtHva: Eksplisitt håndtering av verdier som kan mangle.
Hvorfor: Reduserer NullReferenceException i produksjon.
Bør kunne: Bruke nullable reference types bevisst, ikke undertrykke advarsler.
.NET
.NET SDK
Ikke fullførtHva: Verktøysettet for å bygge og kjøre .NET-applikasjoner.
Hvorfor: Forutsetning for alt .NET-arbeid.
Bør kunne: Bruke dotnet CLI til å opprette og kjøre prosjekter.
Prosjektstruktur
Ikke fullførtHva: Standard mappeoppsett for .NET-løsninger.
Hvorfor: Gjenkjennelig struktur gjør prosjekter lettere å navigere.
Bør kunne: Organisere løsninger med tydelig lagdeling.
NuGet
Ikke fullførtHva: Pakkebehandleren for .NET.
Hvorfor: Slik du henter inn eksterne biblioteker.
Bør kunne: Administrere avhengigheter og versjoner bevisst.
Dependency injection
Ikke fullførtHva: Innebygd IoC-container i .NET.
Hvorfor: Standardmåten å koble sammen tjenester løst i ASP.NET Core.
Bør kunne: Registrere og injisere tjenester med riktig levetid.
Configuration
Ikke fullførtHva: appsettings.json, miljøvariabler og Options-mønsteret.
Hvorfor: Skiller konfigurasjon fra kode per miljø.
Bør kunne: Bruke strongly-typed configuration fremfor rå strenger.
Logging
Ikke fullførtHva: Innebygd logging-abstraksjon i .NET.
Hvorfor: Nødvendig for feilsøking i produksjon.
Bør kunne: Logge med riktig LogLevel og strukturerte data.
Testing
Ikke fullførtHva: Enhets- og integrasjonstesting med xUnit eller NUnit.
Hvorfor: Gir trygghet ved endringer i forretningslogikk.
Bør kunne: Skrive tester for kjernelogikk og API-endepunkter.
Entity Framework Core
Ikke fullførtHva: ORM for .NET.
Hvorfor: Standardverktøyet for databasetilgang i .NET-økosystemet.
Bør kunne: Modellere entiteter, relasjoner og migrasjoner.
ASP.NET Core
Ikke fullførtHva: Rammeverket for web-API-er og webapplikasjoner i .NET.
Hvorfor: Kjernen i backend-utvikling med C#.
Bør kunne: Bygge og strukturere web-API-er idiomatisk.
Minimal APIs
Ikke fullførtHva: Lettvektig måte å definere endepunkter uten controllers.
Hvorfor: Raskt å komme i gang med for mindre API-er.
Bør kunne: Vite når Minimal API er nok, og når controllers passer bedre.
Controllers
Ikke fullførtHva: Klassebasert organisering av endepunkter.
Hvorfor: Bedre struktur for større API-er med mye logikk.
Bør kunne: Organisere controllers etter ressurs.
Middleware
Ikke fullførtHva: Pipeline av komponenter som behandler hver forespørsel.
Hvorfor: Håndterer tverrgående bekymringer som logging og feilhåndtering.
Bør kunne: Skrive egen middleware når innebygde ikke strekker til.
Authentication
Ikke fullførtHva: Bekreftelse av brukeridentitet i ASP.NET Core.
Hvorfor: Forutsetning for beskyttede endepunkter.
Bør kunne: Sette opp JWT-basert autentisering.
Authorization
Ikke fullførtHva: Rolle- og policy-basert tilgangskontroll.
Hvorfor: Bestemmer hva autentiserte brukere får gjøre.
Bør kunne: Bruke [Authorize]-attributter og policies riktig.
Swagger/OpenAPI
Ikke fullførtHva: Automatisk generert API-dokumentasjon.
Hvorfor: Gjør API-et utforskbart og testbart uten ekstern dokumentasjon.
Bør kunne: Holde Swagger-annotasjoner oppdatert med faktisk oppførsel.
Prosjektstige
Konsollkalkulator
Grunnleggende syntaks, metoder og kontrollflyt uten UI eller I/O-kompleksitet.
Budsjettprogram i konsollen
Enkel datamodellering, samlinger og LINQ for beregninger.
SQLite-app
Første møte med persistens og enkel databasetilgang.
REST API
Bygg et første API med Minimal APIs eller controllers.
ASP.NET Core Web API
Strukturert API med lagdeling, DI og konfigurasjon.
API med PostgreSQL
Entity Framework Core mot en ekte relasjonsdatabase.
Autentisering
JWT-basert innlogging og beskyttede endepunkter.
Fullstack-app med Next.js-frontend
Koble et ASP.NET Core-API til en Next.js-frontend i produksjon.
Anbefalt prosjektstruktur for et ASP.NET Core API
MinApp/
├── src/
│ ├── MinApp.Api/
│ │ ├── Controllers/
│ │ ├── Middleware/
│ │ ├── Program.cs
│ │ └── appsettings.json
│ ├── MinApp.Application/
│ │ ├── Services/
│ │ └── DTOs/
│ ├── MinApp.Domain/
│ │ └── Entities/
│ └── MinApp.Infrastructure/
│ ├── Data/
│ └── Repositories/
└── tests/
└── MinApp.Tests/