Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Arbeiten mit DTO | RESTful API
Spring Boot Backend

bookArbeiten mit DTO

Die Verwendung von DTOs vereinfacht und optimiert den Datenaustausch, indem unnötige Felder ausgeschlossen und nur die Daten bereitgestellt werden, die ein bestimmter Client tatsächlich benötigt.

DTOs in diesem Beispiel dienen dazu, den Datenaustausch zwischen Client und Server zu begrenzen. Das ResponseBookDTO wird verwendet, um nur die notwendigen Daten (name, author, price) an den Client zu senden, während das RequestBookDTO es Clients ermöglicht, die erforderlichen Daten (date, name, author, price) an den Server zu übermitteln.

Der wesentliche Vorteil der Verwendung von DTOs besteht darin, dass sie helfen, Daten von der Geschäftslogik zu trennen und eine Kontrolle darüber ermöglichen, welche Daten zwischen den Schichten der Anwendung übertragen oder in HTTP-Antwortnachrichten aufgenommen werden.

Wo wird das DTO angewendet?

DTOs werden verwendet, wenn Daten in einem bestimmten Format dargestellt werden müssen, beispielsweise zum Übertragen von Daten an einen Client oder zum Empfangen von Informationen von einem Client im Kontext einer REST-API.

Dies ist auch relevant bei der Interaktion zwischen Schichten in einer mehrschichtigen Architektur, bei der Daten zwischen Services und Repositories übergeben werden.

Praxisbeispiel

Stellen Sie sich vor, Sie entwickeln eine Anwendung für einen Online-Shop. Sie haben eine Entität namens Product, die viele Informationen enthält: name, description, price, production date, discounts und so weiter.

Ein Client, der eine Liste von Produkten anfordert, benötigt nicht alle diese Informationen. Stattdessen können Sie ein DTO-Objekt erstellen, das nur die notwendigen Felder (wie Name und Preis) enthält, um diese Daten an den Client zu übermitteln.

Anwendungsbeispiel

In unserer Anwendung ist das primäre Modell Book, das vom Client gesendet und vom Server zurückgegeben wird.

Main.java

Main.java

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

Allerdings erscheint das Feld id beim Empfangen von Daten vom Client als überflüssig, da es auf Repository-Ebene generiert wird. Die id wird nur benötigt, wenn eine Antwort zurückgegeben wird.

Hier kommen DTOs ins Spiel. Sie ermöglichen es, die Logik zu trennen und verschiedene Versionen des Book-Modells für Anfragen und Antworten zu erstellen, wobei überflüssige Felder wie id bei Bedarf ausgeschlossen werden.

In einem DTO wird ein Objekt mit dem Präfix request verwendet, um Daten vom Client an den Server zu senden, während ein Objekt mit dem Präfix response genutzt wird, um Daten vom Server an den Client zu übermitteln. Diese Trennung stellt sicher, dass nur notwendige Daten ausgetauscht werden, was sowohl die Sicherheit als auch die Effizienz erhöht.

BookRequestDTO.java

BookRequestDTO.java

BookResponseDTO.java

BookResponseDTO.java

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

Nun haben wir zwei DTOs: eines zum Empfangen von Anfragen BookRequestDTO und ein weiteres zum Senden von Antworten BookResponseDTO.

Es fällt auf, dass BookResponseDTO und unser Book-Modell identisch sind, was die Frage aufwirft: Warum ein separates DTO erstellen, wenn wir einfach das Book-Modell verwenden können?

Der Grund dafür ist, dass wir, falls wir später zusätzliche Informationen hinzufügen möchten, die nur auf der Service-Ebene benötigt werden, unser Book-Modell unnötige Daten an die Repository-Ebene weitergeben würde, was uns dazu zwingen würde, diese Daten irgendwie zu filtern.

Mapper

Um Objekte bequem von einem Typ in einen anderen zu transformieren, verwenden wir eine spezialisierte Bibliothek.

Es kann eine separate Klasse erstellt werden, in der statische Methoden definiert und die Logik zur Konvertierung von Objekten zwischen Typen implementiert wird.

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); } }

In diesem Code verwendet die Klasse MapperBook die Bibliothek ModelMapper für die automatische Objekttransformation.

Sie enthält zwei Methoden: Die erste ist dtoRequestToModel(), welche ein BookRequestDTO-Objekt mit der Methode Book in ein map-Modell umwandelt. Die zweite ist modelToResponseDto(), welche ein Book-Modell in ein BookResponseDTO-Objekt konvertiert.

Dank ModelMapper wird der Prozess der Objekttransformation einfacher und komfortabler, da das manuelle Kopieren von Feldern entfällt.

Hinzufügen eines DTO zu unserer Anwendung

Zusammenfassung

DTO (Data Transfer Object) ist ein einfaches Objekt, das für den Datentransfer zwischen Schichten oder Komponenten einer Anwendung konzipiert ist.

Im Kontext einer Drei-Schichten-Architektur spielt das DTO eine entscheidende Rolle, indem es die Trennung der Schichten sicherstellt und eine effiziente Möglichkeit zum Austausch von Daten zwischen ihnen bietet.

Daher stellt die Verwendung eines DTO eine optimale Lösung dar, wenn es notwendig ist, Informationen zwischen verschiedenen Teilen einer Anwendung zu verwalten und den Transfer von unnötigen oder irrelevanten Daten zu vermeiden.

1. Was ist ein DTO im Kontext der Programmierung?

2. Welche der folgenden Optionen ist die beste Verwendung eines DTO?

question mark

Was ist ein DTO im Kontext der Programmierung?

Select the correct answer

question mark

Welche der folgenden Optionen ist die beste Verwendung eines DTO?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 4

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 3.45

bookArbeiten mit DTO

Swipe um das Menü anzuzeigen

Die Verwendung von DTOs vereinfacht und optimiert den Datenaustausch, indem unnötige Felder ausgeschlossen und nur die Daten bereitgestellt werden, die ein bestimmter Client tatsächlich benötigt.

DTOs in diesem Beispiel dienen dazu, den Datenaustausch zwischen Client und Server zu begrenzen. Das ResponseBookDTO wird verwendet, um nur die notwendigen Daten (name, author, price) an den Client zu senden, während das RequestBookDTO es Clients ermöglicht, die erforderlichen Daten (date, name, author, price) an den Server zu übermitteln.

Der wesentliche Vorteil der Verwendung von DTOs besteht darin, dass sie helfen, Daten von der Geschäftslogik zu trennen und eine Kontrolle darüber ermöglichen, welche Daten zwischen den Schichten der Anwendung übertragen oder in HTTP-Antwortnachrichten aufgenommen werden.

Wo wird das DTO angewendet?

DTOs werden verwendet, wenn Daten in einem bestimmten Format dargestellt werden müssen, beispielsweise zum Übertragen von Daten an einen Client oder zum Empfangen von Informationen von einem Client im Kontext einer REST-API.

Dies ist auch relevant bei der Interaktion zwischen Schichten in einer mehrschichtigen Architektur, bei der Daten zwischen Services und Repositories übergeben werden.

Praxisbeispiel

Stellen Sie sich vor, Sie entwickeln eine Anwendung für einen Online-Shop. Sie haben eine Entität namens Product, die viele Informationen enthält: name, description, price, production date, discounts und so weiter.

Ein Client, der eine Liste von Produkten anfordert, benötigt nicht alle diese Informationen. Stattdessen können Sie ein DTO-Objekt erstellen, das nur die notwendigen Felder (wie Name und Preis) enthält, um diese Daten an den Client zu übermitteln.

Anwendungsbeispiel

In unserer Anwendung ist das primäre Modell Book, das vom Client gesendet und vom Server zurückgegeben wird.

Main.java

Main.java

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

Allerdings erscheint das Feld id beim Empfangen von Daten vom Client als überflüssig, da es auf Repository-Ebene generiert wird. Die id wird nur benötigt, wenn eine Antwort zurückgegeben wird.

Hier kommen DTOs ins Spiel. Sie ermöglichen es, die Logik zu trennen und verschiedene Versionen des Book-Modells für Anfragen und Antworten zu erstellen, wobei überflüssige Felder wie id bei Bedarf ausgeschlossen werden.

In einem DTO wird ein Objekt mit dem Präfix request verwendet, um Daten vom Client an den Server zu senden, während ein Objekt mit dem Präfix response genutzt wird, um Daten vom Server an den Client zu übermitteln. Diese Trennung stellt sicher, dass nur notwendige Daten ausgetauscht werden, was sowohl die Sicherheit als auch die Effizienz erhöht.

BookRequestDTO.java

BookRequestDTO.java

BookResponseDTO.java

BookResponseDTO.java

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

Nun haben wir zwei DTOs: eines zum Empfangen von Anfragen BookRequestDTO und ein weiteres zum Senden von Antworten BookResponseDTO.

Es fällt auf, dass BookResponseDTO und unser Book-Modell identisch sind, was die Frage aufwirft: Warum ein separates DTO erstellen, wenn wir einfach das Book-Modell verwenden können?

Der Grund dafür ist, dass wir, falls wir später zusätzliche Informationen hinzufügen möchten, die nur auf der Service-Ebene benötigt werden, unser Book-Modell unnötige Daten an die Repository-Ebene weitergeben würde, was uns dazu zwingen würde, diese Daten irgendwie zu filtern.

Mapper

Um Objekte bequem von einem Typ in einen anderen zu transformieren, verwenden wir eine spezialisierte Bibliothek.

Es kann eine separate Klasse erstellt werden, in der statische Methoden definiert und die Logik zur Konvertierung von Objekten zwischen Typen implementiert wird.

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); } }

In diesem Code verwendet die Klasse MapperBook die Bibliothek ModelMapper für die automatische Objekttransformation.

Sie enthält zwei Methoden: Die erste ist dtoRequestToModel(), welche ein BookRequestDTO-Objekt mit der Methode Book in ein map-Modell umwandelt. Die zweite ist modelToResponseDto(), welche ein Book-Modell in ein BookResponseDTO-Objekt konvertiert.

Dank ModelMapper wird der Prozess der Objekttransformation einfacher und komfortabler, da das manuelle Kopieren von Feldern entfällt.

Hinzufügen eines DTO zu unserer Anwendung

Zusammenfassung

DTO (Data Transfer Object) ist ein einfaches Objekt, das für den Datentransfer zwischen Schichten oder Komponenten einer Anwendung konzipiert ist.

Im Kontext einer Drei-Schichten-Architektur spielt das DTO eine entscheidende Rolle, indem es die Trennung der Schichten sicherstellt und eine effiziente Möglichkeit zum Austausch von Daten zwischen ihnen bietet.

Daher stellt die Verwendung eines DTO eine optimale Lösung dar, wenn es notwendig ist, Informationen zwischen verschiedenen Teilen einer Anwendung zu verwalten und den Transfer von unnötigen oder irrelevanten Daten zu vermeiden.

1. Was ist ein DTO im Kontext der Programmierung?

2. Welche der folgenden Optionen ist die beste Verwendung eines DTO?

question mark

Was ist ein DTO im Kontext der Programmierung?

Select the correct answer

question mark

Welche der folgenden Optionen ist die beste Verwendung eines DTO?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 4
some-alt