Två performance-/koreografi-mönster: snapshots gör rehydrering snabb, sagor koordinerar över aggregat.
V5 Mån
Vecka / Dag
4 h
Total tid
100 min
Teori
130 min
Workshop
Mål
Studenten implementerar ISnapshotStore + integration i repository.
Studenten kan rebuilda en projection från noll.
Studenten skriver en MoneyTransferSaga med compensating reactions.
Agenda
0:00
Recap kö + undo. Vilken är prestandarisken nu? (långa streams)
0:15
Teori: snapshots — cache, inte sanning. Får alltid kastas.
0:45
Teori: projection rebuild — slänga read-tabell, replaya från event 0.
1:15
Teori: sagor — orchestration vs choreography. Compensating reactions.
1:45
Paus 15 min
2:00
Workshop: snapshot + rebuild + saga.
3:45
Varning: undvik sagor om det går. Visa enklare alternativ.
4:00
Slut
Talartips
Snapshot är en cache. Repetera detta tre gånger. Om man inte kan radera sin snapshot-tabell och bygga om alla snapshots från eventström — då gör man fel.
Projection rebuild är en superkraft. Visa det live: DROP TABLE → starta projection → den bygger om sig. Studenter brukar bli imponerade.
Sagor är kraftfulla men svåra. Använd bara när du verkligen behöver koordinera över aggregat. För det mesta räcker två commands från klienten.
Workshop
Skapa dbo.Snapshots-tabell (StreamId, Version, JsonState).
Implementera SqlSnapshotStore.
Modifiera EventSourcedRepository: ladda snapshot → ladda events efter snapshot-version.
Spara snapshot var 100:e event.
Skapa MoneyTransferSaga som lyssnar på TransferRequested → debit → credit → markera klar; rollback på fel.
Testa rebuild: DELETE FROM AccountSummary; UPDATE Checkpoints SET Position = 0; → starta om → verifiera samma resultat.
Snabba
Sagans state-machine — modellera med Stateless-biblioteket.
Lägg in idle timeout för saga.
Stöd
Tillhandahåll snapshot-tabell färdig.
Skriv saga-skelett som studenten fyller i.
FAQ
När är man redo för snapshots?
När rehydrering tar >100 ms i hot path eller streams går över 5–10k events.
Process manager vs saga?
Samma sak i praktiken. Termen "saga" kommer från 1987-papperet; "process manager" är Enterprise Integration Patterns-terminologin.
Vad om sagan kraschar mitt i?
Saga-state ska persisteras (egen tabell eller event stream). Vid omstart läses den och fortsätter där den var.
Fallgrop Snapshot-format ändras → gammal snapshot blir inkompatibel. Lösning: versionera, eller släng alla snapshots vid deploy och låt repository bygga om dem.
Förberedelse till L10 Slipa Blazor WebAssembly — se till att studenter har .NET 10-templates installerade. Diff mot Server-rendering (Blazor United) — vi använder WASM.