Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Arbeide med DTO | RESTful Api
Spring Boot Backend

bookArbeide med DTO

Bruk av DTO-er forenkler og optimaliserer datautveksling ved å utelate unødvendige felt og kun gi data som en spesifikk klient faktisk trenger.

DTO-er i dette eksemplet brukes til å begrense datautveksling mellom klient og server. ResponseBookDTO brukes til å sende kun nødvendige data (name, author, price) til klienten, mens RequestBookDTO lar klienter sende påkrevd data (date, name, author, price) til serveren.

Den viktigste fordelen med å bruke DTO-er er at de bidrar til å skille data fra forretningslogikk og gir kontroll over hvilke data som overføres mellom lagene i applikasjonen eller inkluderes i HTTP-svarmeldinger.

Hvor brukes DTO?

DTO-er brukes når det er behov for å presentere data i et spesifikt format, for eksempel for overføring av data til en klient eller for å motta informasjon fra en klient innenfor rammen av et REST API.

Dette er også relevant ved samhandling mellom lag i en flerlagsarkitektur, der data sendes mellom tjenester og databaser.

Virkelighetseksempel

Tenk deg at du utvikler en applikasjon for en nettbutikk. Du har en entitet kalt Product, som inkluderer mye informasjon: name, description, price, production date, discounts, og så videre.

En klient som ber om en liste over produkter trenger ikke all denne informasjonen. I stedet kan du opprette et DTO-objekt som kun inneholder de nødvendige feltene (slik som navn og pris) for å sende disse dataene til klienten.

Eksempel på bruk

I vår applikasjon er den primære modellen Book, som sendes av klienten og returneres av serveren.

Main.java

Main.java

copy
12345678
@Getter @Setter public class Book { private String id; private String name; private String author; private String price; }

Likevel virker det som om id-feltet er unødvendig når data mottas fra klienten, siden det genereresrepository-nivå. id er kun nødvendig når det returneres et svar.

Her kommer DTO-er til unnsetning. De gjør det mulig å skille logikken og lage ulike versjoner av Book-modellen for forespørsler og svar, slik at unødvendige felt som id kan utelates der det er hensiktsmessig.

I en DTO brukes et objekt med request-prefiks for å sende data fra klient til server, mens et objekt med response-prefiks brukes for å sende data fra server til klient. Denne separasjonen sikrer at kun nødvendige data utveksles, noe som forbedrer både sikkerhet og effektivitet.

BookRequestDTO.java

BookRequestDTO.java

BookResponseDTO.java

BookResponseDTO.java

copy
12345
public class BookRequestDTO { private String name; private String author; private String price; }

Nå har vi to DTO-er: én for å motta forespørsler BookRequestDTO og en annen for å sende svar BookResponseDTO.

Du legger kanskje merke til at BookResponseDTO og vår Book modell er identiske, noe som reiser spørsmålet: hvorfor lage en egen DTO hvis vi bare kan bruke Book modellen?

Årsaken er at hvis vi senere bestemmer oss for å legge til ekstra informasjon som kun trengs på tjenestenivå, vil vår Book modell ende opp med å sende unødvendige data til repository-nivået, noe som krever at vi filtrerer det på en eller annen måte.

Mapper

For å enkelt transformere objekter fra én type til en annen, bruker vi et spesialisert bibliotek.

Det er mulig å opprette en egen klasse hvor vi definerer statisk metoder og implementerer logikken for konvertering av objekter mellom typer.

MapperBook.

MapperBook.

copy
1234567891011
public class MapperBook { private static final ModelMapper mapper = new ModelMapper(); public static Book dtoRequestToModel(BookRequestDTO dto) { return mapper.map(dto, Book.class); } public static BookResponseDTO modelToResponseDto(Book book) { return mapper.map(book, BookResponseDTO.class); } }

I denne koden bruker MapperBook klassen ModelMapper biblioteket for automatisk objekttransformasjon.

Den inneholder to metoder: den første er dtoRequestToModel(), som transformerer et BookRequestDTO objekt til en Book modell ved hjelp av map metoden, og den andre er modelToResponseDto(), som konverterer en Book modell til et BookResponseDTO objekt.

Takket være ModelMapper blir prosessen med objekttransformasjon enklere og mer praktisk, og eliminerer behovet for å manuelt kopiere felter.

Legge til en DTO i applikasjonen

Sammendrag

DTO (Data Transfer Object) er et enkelt objekt laget for overføring av data mellom lag eller komponenter i en applikasjon.

I konteksten av en trelagsarkitektur spiller DTO en viktig rolle ved å sikre separasjon av lag og gi en effektiv måte å utveksle data mellom dem.

Dermed blir bruk av en DTO en optimal løsning når det er nødvendig å håndtere informasjon mellom ulike deler av en applikasjon, og unngå overføring av unødvendige eller irrelevante data.

1. Hva er en DTO i programmeringssammenheng?

2. Hva er den beste bruken av en DTO?

question mark

Hva er en DTO i programmeringssammenheng?

Select the correct answer

question mark

Hva er den beste bruken av en DTO?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 4

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

What are the main benefits of using DTOs in an application?

Can you explain how ModelMapper works for mapping DTOs?

When should I use a DTO instead of a regular model?

Awesome!

Completion rate improved to 3.45

bookArbeide med DTO

Sveip for å vise menyen

Bruk av DTO-er forenkler og optimaliserer datautveksling ved å utelate unødvendige felt og kun gi data som en spesifikk klient faktisk trenger.

DTO-er i dette eksemplet brukes til å begrense datautveksling mellom klient og server. ResponseBookDTO brukes til å sende kun nødvendige data (name, author, price) til klienten, mens RequestBookDTO lar klienter sende påkrevd data (date, name, author, price) til serveren.

Den viktigste fordelen med å bruke DTO-er er at de bidrar til å skille data fra forretningslogikk og gir kontroll over hvilke data som overføres mellom lagene i applikasjonen eller inkluderes i HTTP-svarmeldinger.

Hvor brukes DTO?

DTO-er brukes når det er behov for å presentere data i et spesifikt format, for eksempel for overføring av data til en klient eller for å motta informasjon fra en klient innenfor rammen av et REST API.

Dette er også relevant ved samhandling mellom lag i en flerlagsarkitektur, der data sendes mellom tjenester og databaser.

Virkelighetseksempel

Tenk deg at du utvikler en applikasjon for en nettbutikk. Du har en entitet kalt Product, som inkluderer mye informasjon: name, description, price, production date, discounts, og så videre.

En klient som ber om en liste over produkter trenger ikke all denne informasjonen. I stedet kan du opprette et DTO-objekt som kun inneholder de nødvendige feltene (slik som navn og pris) for å sende disse dataene til klienten.

Eksempel på bruk

I vår applikasjon er den primære modellen Book, som sendes av klienten og returneres av serveren.

Main.java

Main.java

copy
12345678
@Getter @Setter public class Book { private String id; private String name; private String author; private String price; }

Likevel virker det som om id-feltet er unødvendig når data mottas fra klienten, siden det genereresrepository-nivå. id er kun nødvendig når det returneres et svar.

Her kommer DTO-er til unnsetning. De gjør det mulig å skille logikken og lage ulike versjoner av Book-modellen for forespørsler og svar, slik at unødvendige felt som id kan utelates der det er hensiktsmessig.

I en DTO brukes et objekt med request-prefiks for å sende data fra klient til server, mens et objekt med response-prefiks brukes for å sende data fra server til klient. Denne separasjonen sikrer at kun nødvendige data utveksles, noe som forbedrer både sikkerhet og effektivitet.

BookRequestDTO.java

BookRequestDTO.java

BookResponseDTO.java

BookResponseDTO.java

copy
12345
public class BookRequestDTO { private String name; private String author; private String price; }

Nå har vi to DTO-er: én for å motta forespørsler BookRequestDTO og en annen for å sende svar BookResponseDTO.

Du legger kanskje merke til at BookResponseDTO og vår Book modell er identiske, noe som reiser spørsmålet: hvorfor lage en egen DTO hvis vi bare kan bruke Book modellen?

Årsaken er at hvis vi senere bestemmer oss for å legge til ekstra informasjon som kun trengs på tjenestenivå, vil vår Book modell ende opp med å sende unødvendige data til repository-nivået, noe som krever at vi filtrerer det på en eller annen måte.

Mapper

For å enkelt transformere objekter fra én type til en annen, bruker vi et spesialisert bibliotek.

Det er mulig å opprette en egen klasse hvor vi definerer statisk metoder og implementerer logikken for konvertering av objekter mellom typer.

MapperBook.

MapperBook.

copy
1234567891011
public class MapperBook { private static final ModelMapper mapper = new ModelMapper(); public static Book dtoRequestToModel(BookRequestDTO dto) { return mapper.map(dto, Book.class); } public static BookResponseDTO modelToResponseDto(Book book) { return mapper.map(book, BookResponseDTO.class); } }

I denne koden bruker MapperBook klassen ModelMapper biblioteket for automatisk objekttransformasjon.

Den inneholder to metoder: den første er dtoRequestToModel(), som transformerer et BookRequestDTO objekt til en Book modell ved hjelp av map metoden, og den andre er modelToResponseDto(), som konverterer en Book modell til et BookResponseDTO objekt.

Takket være ModelMapper blir prosessen med objekttransformasjon enklere og mer praktisk, og eliminerer behovet for å manuelt kopiere felter.

Legge til en DTO i applikasjonen

Sammendrag

DTO (Data Transfer Object) er et enkelt objekt laget for overføring av data mellom lag eller komponenter i en applikasjon.

I konteksten av en trelagsarkitektur spiller DTO en viktig rolle ved å sikre separasjon av lag og gi en effektiv måte å utveksle data mellom dem.

Dermed blir bruk av en DTO en optimal løsning når det er nødvendig å håndtere informasjon mellom ulike deler av en applikasjon, og unngå overføring av unødvendige eller irrelevante data.

1. Hva er en DTO i programmeringssammenheng?

2. Hva er den beste bruken av en DTO?

question mark

Hva er en DTO i programmeringssammenheng?

Select the correct answer

question mark

Hva er den beste bruken av en DTO?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 4
some-alt