Arbeiten 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
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
BookResponseDTO.java
12345public 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.
1234567891011public 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?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 3.45
Arbeiten 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
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
BookResponseDTO.java
12345public 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.
1234567891011public 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?
Danke für Ihr Feedback!