Första lektionen sätter tonen för hela kursen. Mål: alla deltagare har en mental karta över teknikstacken och förstår varför valen är gjorda som de är.
V1 Mån
Vecka / Dag
4 h
Total tid
90 min
Teori
120 min
Workshop
Lektionens mål
Studenten kan rita upp arkitekturen Blazor → API → MediatR → Event store → MSSQL.
Studenten kan namnge teknikkomponenterna och förklara varför var och en valts.
Startkoden klonad och kör en hello-world end-to-end.
Agenda (4 h)
0:00
Incheckning + förväntningar. Tour runt rummet: vad har deltagarna gjort tidigare?
0:20
Teori: stora bilden. Whiteboard — rita arkitekturen från scratch.
Workshop: klona startkod, docker-compose up, kör hello-world.
3:30
Q&A + nästa steg: läs DDD-kapitel 1 till lektion 2.
4:00
Slut
Talartips per sektion
När du ritar arkitekturen: rita stegvis. Börja med "användare" och "databas". Lägg till en låda i taget och fråga klassen "varför behöver vi den här?". Det avslöjar förkunskaperna.
Om SqlStreamStore: betona att vi inte kör EventStoreDB. Anledning: en databas att övervaka, en backup-strategi, en connection string. Många produktionsteam värdesätter detta över avancerade subscription-features.
Om "varför event sourcing": spara inte argumentationen till lektion 5. Säg det redan här: "audit-trail, undo, time-travel-debugging, fritt val av read models". Då finns motivationen genom hela kursen.
Workshop — guide för läraren
Workshop-mål: alla har en körande Blazor-klient som anropar API:t som returnerar data från MSSQL. Inga aggregat ännu — bara ett trivialt endpoint som returnerar "hello world". Lösningen byggs från dotnet new-templates — ingen extern startkod krävs.
Skapa solution + projekt:
dotnet new sln -n Bank
dotnet new webapi -n Bank.Api --use-minimal-apis
dotnet new blazorwasm -n Bank.Client
dotnet sln add Bank.Api Bank.Client
Skapa docker-compose.yml i rooten med MSSQL 2022 (image mcr.microsoft.com/mssql/server:2022-latest, port 1433, SA-lösenord via env). Kör docker compose up -d mssql.
Lägg till ett GET /hello-endpoint i Bank.Api som returnerar "hello world".
I Bank.Client: registrera typed HttpClient i Program.cs mot API:ts URL och anropa /hello från en Razor-komponent.
Kör dotnet run --project Bank.Api + dotnet run --project Bank.Client i två terminaler. Verifiera i webbläsaren att hello-sidan visar svaret från API:t.
Om du föredrar startkod: en del lärare lägger upp ett eget course-starter-repo med ovanstående redan ihopkopplat. Dela då URL:n i kursens kommunikationskanal innan lektionen — det finns inget officiellt repo som följer med detta material.
För dem som blir snabbt klara
Lägg till en ny endpoint GET /version som returnerar assembly-versionen.
Anropa den från Blazor-klienten och visa i UI:t.
För dem som behöver stöd
Docker/MSSQL-installation kan ta tid — para ihop dem som hjälpta med dem som installerar.
Förbered en backup-VM med allt installerat (lärar-laptop) om Docker krånglar.
Vanliga frågor
Varför inte EventStoreDB?
SqlStreamStore på MSSQL ger oss en databas att hantera. Det är en pedagogisk och operationell vinst. EventStoreDB är ett alldeles utmärkt val i produktion när teamet är moget — men introducerar en till komponent.
Är det inte överkill att använda CQRS + event sourcing för ett bankkonto?
Ja, för det specifika exemplet. Vi använder det för att lära mönstret. Diskussionen om "när är det rätt val" tas i lektion 1, 4 och 11.
Använder vi MediatR trots licensändringen?
Ja. Detaljerna kring den kommersiella licensen tas i lektion 4. Alternativ (egen implementation, Brighter, Wolverine) nämns då.
Hemuppgift att kommunicera tydligt
Läs DDD-kapitel 1 (Vernon, Implementing Domain-Driven Design) till nästa gång. Det skapar gemensamt språk för lektion 2.
Förberedelse till nästa lektion
Förbered ett kort kravdokument för "bankkonto" som workshopen i L2 utgår från. Ladda upp till kurs-LMS innan L2 startar.