När du visar Apply-pattern: kod inte affärslogik in i Apply-metoden! Det är klassiskt nybörjarfel. Beslutslogiken är i Deposit; Apply bara muterar tillstånd.
Visa det "felaktiga" alternativet först (sätta Balance direkt i Deposit-metoden), så att Apply-pattern framstår som lösningen på ett verkligt problem — inte ett ritual.
Aggregat-gränser är subjektiva. Det är OK att två lärare ritar dem olika. Diskutera olika varianter på whiteboard.
Implementera invarianter: minst 0 kr saldo (eller kreditgräns), aktiv status.
Skriv 3 enhetstester med Given-When-Then.
Snabba
Lägg till Close-funktion + invariant: kan inte stänga konto med saldo.
Stöd
Tillhandahåll en halvfärdig AggregateRoot-skiss att fylla i.
Para för pair-programming.
FAQ
Får aggregatet referera till andra aggregat?
Endast via ID. Inte via objektsreferens. Annars löses gränsen upp.
Hur stort får ett aggregat vara?
Så litet som möjligt medan invarianterna fortfarande hålls. Tumregel: om du skriver två aggregat i samma transaktion — slå ihop dem, eller acceptera eventual consistency mellan dem (saga).
Behöver Apply-metoden vara private?
Ja, eller protected. Aldrig public — ingen utanför aggregatet ska kunna applicera events.
Hemuppgift Soloprojekt 1 från lektion 03 (utöka Account med Reopen och tester).
Förberedelse till L4 Installera MediatR (8.x för open source, eller en planerad fork). Kör dotnet add package MediatR.