Hei
Jeg har et spørsmål rundt aggregater og lesing/skriving til database.
Når jeg jobber med DDD liker jeg å alltid lese opp hele aggregater, med hele objektgrafen populert, slik at jeg alltid vet at jeg har "alt" og kan spørre aggregatet om hva jeg vil. Jeg har vært borti kode hvor man leser opp forskjellige deler av aggregatet i forskjellige metoder, og får da typisk kode som sier "if aggregate.something is null, then load something from database (based on id). Then do aggregate.SomeOperationDependentOnSomething), som jeg ikke syns så mye om.
Men hvordan gjør man det best når et aggregat "oppstår". F.eks, har vi i vårt system brukere som kan ha ulike roller. En rolle er knyttet til en gruppe som igjen er knyttet til ett sett privilegier. Så utifra hvilken rolle en bruker har, kan man også vite hvilke privilegier denne brukeren har. Vi bruker EntityFramework, så domeneobjektene våre har typisk bade id som referanse OG en virtual property til samme objekt. (Et mønster jeg ikke liker i det hele tatt, men det er mye jeg ikke liker med EF og det blir vel en helt annen diskusjon..)
Det som skjer nå når man legger til en ny bruker til systemet, er at brukeren opprettes med kun en id til rollen. Så lagres brukeren med rolle-id. Neste gang brukeren leses opp vil hele rolle-grafen være populert, og man kan spørre brukeren hvilke privilegier han har. Men FØR brukeren er lagret, har han altså ikke denne informasjonen. Dvs aggregatet ser ulikt ut før og etter lagring.
Hvordan gjør man dette på en god mate? Er det f.eks vanlig å lese opp hele rollen med alle under-objektene, slik at man kan legge denne til brukeren før den lagres? Andre tanker?
- Ellen Lippe