Frågor om DDD
Vad för typ av logik ska finnas i Entities respektive Services?
Logiken ska finnas i entiteterna. Om funktionalitet inte på ett logiskt sätt går att lägga i en identitet kan man bryta ut den i en service. En service måste representera ett koncept i domänen, så som “TransferMoney”. På så vis undviker man att skapa upp massa services i onödan.
Kan Value Objects innehålla Entities?
Ja, Value Objects kan innehålla referenser till entiteter.
Är domain, context och bounded context samma sak?
Domain model är problemet man försöker lösa inom en viss bounded context. Termerna man använder är beroende av vilken context man befinner sig i.
När vet man om det ska vara en entity eller value object?
Är det logiskt att objektet kan stå för sig själv?
T.ex. Ålder är ett Value Object. Ålder betyder inget utanför en Entitet. En person kan ha en viss ålder. En person kan stå för sig själv och har en identitet(personnummer).
Det beror även på domänen. En Entitet i en viss domän är inte nödvändigtvis en Entitet i en annan domän. Ska objeket ändras utan att det är ett nytt object? Då är det antagligen en entiet. En person kan byta namn, men det betyder inte att det är en annan person helt plötsligt.
Är alla entiteter aggregatrötter?
Nej, inte nödvändigtvis. En en aggregate root har global identitet. En Entity kan ha antingen global identitet eller lokal identitet.
En aggregatrot existerar för att kontrollera vilka entiteter som påverkas av en transaktion. Operationerna får bara ske genom aggregatroten.
T.ex om du har en order så är det bara ordern som får laddas från ett repository. Om du i ordern har ett OrderItem får du bara interagera med objektet via Ordern. När du är klar ska hela ordern sparas, inte bara OrderItem.
En entitet kan innehålla en referens till en aggregatrot.
Ingen entitet utanför aggregatrotet får hålla en referens till en entitet innanför aggregatroten.
När är det värt att skapa en Custom Type?
Ställer du den här frågan bör du antagligen göra en Custom Type. Det är svårt att skapa en custom type i efterhand. Det är lätt att ta bort en när den inte behövs.