Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Робота з DTO | RESTful Api
Spring Boot Backend

bookРобота з DTO

Використання DTO спрощує та оптимізує обмін даними шляхом виключення непотрібних полів і надання лише тієї інформації, яка дійсно потрібна клієнту.

DTO у цьому прикладі використовуються для обмеження обміну даними між клієнтом і сервером. ResponseBookDTO застосовується для надсилання лише необхідних даних (name, author, price) клієнту, тоді як RequestBookDTO дозволяє клієнтам надсилати обов'язкові дані (date, name, author, price) на сервер.

Основна перевага використання DTO полягає у відокремленні даних від бізнес-логіки та можливості контролювати, які дані передаються між шарами додатку або включаються до HTTP відповідей.

Де застосовується DTO?

DTO використовуються, коли виникає потреба представити дані у визначеному форматі, наприклад, для передачі даних клієнту або отримання інформації від клієнта у контексті REST API.

Це також актуально при взаємодії між рівнями у багаторівневій архітектурі, де дані передаються між сервісами та репозиторіями.

Приклад із реального життя

Уявіть, що ви розробляєте застосунок для інтернет-магазину. У вас є сутність з назвою Product, яка містить багато інформації: name, description, price, production date, discounts тощо.

Клієнту, який запитує список товарів, не потрібна вся ця інформація. Замість цього можна створити DTO-об'єкт, який містить лише необхідні поля (наприклад, назва та ціна), щоб відправити ці дані клієнту.

Приклад використання

У нашому застосунку основна модель — це Book, яка надсилається клієнтом і повертається сервером.

Main.java

Main.java

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

Однак, чи не здається, що поле id є зайвим при отриманні даних від клієнта, оскільки воно генерується на рівні репозиторію. Нам потрібен id лише при поверненні відповіді.

Саме тут на допомогу приходять DTO. Вони дозволяють відокремити логіку та створити різні версії моделі Book для запитів і відповідей, виключаючи непотрібні поля, такі як id, де це доцільно.

У DTO об'єкт із префіксом request використовується для надсилання даних від клієнта до сервера, а об'єкт із префіксом response — для надсилання даних від сервера до клієнта. Такий розподіл гарантує, що обмінюються лише необхідними даними, підвищуючи безпеку та ефективність.

BookRequestDTO.java

BookRequestDTO.java

BookResponseDTO.java

BookResponseDTO.java

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

Тепер у нас є два DTO: один для отримання запитів BookRequestDTO та інший для надсилання відповідей BookResponseDTO.

Можна помітити, що BookResponseDTO та наша модель Book є ідентичними, що викликає питання: навіщо створювати окремий DTO, якщо можна просто використовувати модель Book?

Причина полягає в тому, що якщо ми згодом вирішимо додати додаткову інформацію, яка потрібна лише на рівні сервісу, наша модель Book буде передавати зайві дані на рівень репозиторію, і нам доведеться їх фільтрувати.

Мапер

Для зручного перетворення об'єктів з одного типу в інший використовується спеціалізована бібліотека.

Можна створити окремий клас, у якому визначаються статичні методи та реалізується логіка конвертації об'єктів між типами.

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

У цьому коді клас MapperBook використовує бібліотеку ModelMapper для автоматичного перетворення об'єктів.

Він містить два методи: першийdtoRequestToModel(), який перетворює об'єкт BookRequestDTO на модель Book за допомогою методу map, а другийmodelToResponseDto(), який конвертує модель Book у об'єкт BookResponseDTO.

Завдяки ModelMapper процес перетворення об'єктів стає простішим та зручнішим, усуваючи необхідність вручну копіювати поля.

Додавання DTO до нашого застосунку

Підсумок

DTO (Data Transfer Object) — це простий об'єкт, призначений для передачі даних між шарами або компонентами застосунку.

У контексті трирівневої архітектури DTO відіграє важливу роль, забезпечуючи розділення шарів та надаючи ефективний спосіб обміну даними між ними.

Отже, використання DTO є оптимальним рішенням у випадках, коли необхідно керувати інформацією між різними частинами застосунку, уникаючи передачі зайвих або нерелевантних даних.

1. Що таке DTO у контексті програмування?

2. Яке з наведеного є найкращим використанням DTO?

question mark

Що таке DTO у контексті програмування?

Select the correct answer

question mark

Яке з наведеного є найкращим використанням DTO?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 4

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 3.45

bookРобота з DTO

Свайпніть щоб показати меню

Використання DTO спрощує та оптимізує обмін даними шляхом виключення непотрібних полів і надання лише тієї інформації, яка дійсно потрібна клієнту.

DTO у цьому прикладі використовуються для обмеження обміну даними між клієнтом і сервером. ResponseBookDTO застосовується для надсилання лише необхідних даних (name, author, price) клієнту, тоді як RequestBookDTO дозволяє клієнтам надсилати обов'язкові дані (date, name, author, price) на сервер.

Основна перевага використання DTO полягає у відокремленні даних від бізнес-логіки та можливості контролювати, які дані передаються між шарами додатку або включаються до HTTP відповідей.

Де застосовується DTO?

DTO використовуються, коли виникає потреба представити дані у визначеному форматі, наприклад, для передачі даних клієнту або отримання інформації від клієнта у контексті REST API.

Це також актуально при взаємодії між рівнями у багаторівневій архітектурі, де дані передаються між сервісами та репозиторіями.

Приклад із реального життя

Уявіть, що ви розробляєте застосунок для інтернет-магазину. У вас є сутність з назвою Product, яка містить багато інформації: name, description, price, production date, discounts тощо.

Клієнту, який запитує список товарів, не потрібна вся ця інформація. Замість цього можна створити DTO-об'єкт, який містить лише необхідні поля (наприклад, назва та ціна), щоб відправити ці дані клієнту.

Приклад використання

У нашому застосунку основна модель — це Book, яка надсилається клієнтом і повертається сервером.

Main.java

Main.java

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

Однак, чи не здається, що поле id є зайвим при отриманні даних від клієнта, оскільки воно генерується на рівні репозиторію. Нам потрібен id лише при поверненні відповіді.

Саме тут на допомогу приходять DTO. Вони дозволяють відокремити логіку та створити різні версії моделі Book для запитів і відповідей, виключаючи непотрібні поля, такі як id, де це доцільно.

У DTO об'єкт із префіксом request використовується для надсилання даних від клієнта до сервера, а об'єкт із префіксом response — для надсилання даних від сервера до клієнта. Такий розподіл гарантує, що обмінюються лише необхідними даними, підвищуючи безпеку та ефективність.

BookRequestDTO.java

BookRequestDTO.java

BookResponseDTO.java

BookResponseDTO.java

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

Тепер у нас є два DTO: один для отримання запитів BookRequestDTO та інший для надсилання відповідей BookResponseDTO.

Можна помітити, що BookResponseDTO та наша модель Book є ідентичними, що викликає питання: навіщо створювати окремий DTO, якщо можна просто використовувати модель Book?

Причина полягає в тому, що якщо ми згодом вирішимо додати додаткову інформацію, яка потрібна лише на рівні сервісу, наша модель Book буде передавати зайві дані на рівень репозиторію, і нам доведеться їх фільтрувати.

Мапер

Для зручного перетворення об'єктів з одного типу в інший використовується спеціалізована бібліотека.

Можна створити окремий клас, у якому визначаються статичні методи та реалізується логіка конвертації об'єктів між типами.

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

У цьому коді клас MapperBook використовує бібліотеку ModelMapper для автоматичного перетворення об'єктів.

Він містить два методи: першийdtoRequestToModel(), який перетворює об'єкт BookRequestDTO на модель Book за допомогою методу map, а другийmodelToResponseDto(), який конвертує модель Book у об'єкт BookResponseDTO.

Завдяки ModelMapper процес перетворення об'єктів стає простішим та зручнішим, усуваючи необхідність вручну копіювати поля.

Додавання DTO до нашого застосунку

Підсумок

DTO (Data Transfer Object) — це простий об'єкт, призначений для передачі даних між шарами або компонентами застосунку.

У контексті трирівневої архітектури DTO відіграє важливу роль, забезпечуючи розділення шарів та надаючи ефективний спосіб обміну даними між ними.

Отже, використання DTO є оптимальним рішенням у випадках, коли необхідно керувати інформацією між різними частинами застосунку, уникаючи передачі зайвих або нерелевантних даних.

1. Що таке DTO у контексті програмування?

2. Яке з наведеного є найкращим використанням DTO?

question mark

Що таке DTO у контексті програмування?

Select the correct answer

question mark

Яке з наведеного є найкращим використанням DTO?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 4
some-alt