Data Transfer Object
En DTO er data på vej et andet sted hen
En DTO er et simpelt objekt, der kun bærer data: ingen forretningslogik, ingen database, ingen sideeffekter. Den bruges, når data skal krydse en grænse, fx mellem din server og en klient, eller mellem to lag i et program.
Den korte forklaring
Forestil dig, at din database har en tabel med brugere. Den indeholder navn og e-mail, men også en hash af adgangskoden, interne flag og tidsstempler. Når en app spørger efter en bruger, vil du ikke sende det hele. Du laver i stedet en DTO, der kun indeholder de felter, appen skal bruge, og sender den.
På den måde bliver DTO'en en kontrakt: den beskriver præcis, hvilke data der går ind og ud ad døren. Du kan ændre din database bagved, uden at kontrakten ændrer sig.
// Det, klienten får at se:
// ingen adgangskoder, ingen interne flag.
interface BrugerDto {
id: number;
navn: string;
email: string;
oprettet: string; // ISO 8601-dato
}Kendetegn ved en god DTO
- Kun data. Felter og eventuelt en konstruktør. Ingen metoder, der gør noget.
- Gerne uforanderlig. Når den er lavet, ændres den ikke. Det gør den let at forstå og sikker at dele.
- Lavet til ét formål. En DTO til at oprette en bruger og en til at vise en bruger er tit to forskellige ting.
- Let at serialisere. Enkle typer, som kan blive til JSON og tilbage uden overraskelser.
Hvor kommer begrebet fra?
Mønsteret blev kendt bredt gennem Martin Fowlers bog Patterns of Enterprise Application Architecture fra 2002. Dengang var hovedformålet at samle mange værdier i ét objekt, så et program kunne nøjes med ét kald over netværket i stedet for mange små. I Java-verdenen hed det samme mønster også Transfer Object.
I dag bruges ordet bredere om ethvert simpelt dataobjekt, der sendes over en grænse i et system, fx i et REST- eller GraphQL-API.