Spring til indhold
dto.dk

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.

Lav en DTO ud fra JSON Se eksempler

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.

TypeScript
// 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.

Læs videre