Lärarguide · Lektion 1 av 10

Helhetsbild & arkitektur

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

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.
1:00
Teori: tekniker en-och-en (Blazor, MediatR, SqlStreamStore, MSSQL, Polly).
1:45
Paus 15 min
2:00
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.

  1. 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
  2. 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.
  3. Lägg till ett GET /hello-endpoint i Bank.Api som returnerar "hello world".
  4. I Bank.Client: registrera typed HttpClient i Program.cs mot API:ts URL och anropa /hello från en Razor-komponent.
  5. 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.

Nästa: L2 — DDD-grunder →