Ответ
DTO (Data Transfer Object) — это шаблон проектирования, представляющий собой простой контейнер для данных, предназначенный исключительно для передачи между слоями или системами.
Основные характеристики DTO:
- Только данные: Содержит поля (часто только для чтения) и методы доступа к ним (геттеры), но не содержит бизнес-логики.
- Неизменяемость (Immutable): Часто реализуется как неизменяемый объект, что делает поток данных предсказуемым и безопасным для многопоточности.
- Сериализуемость: Легко преобразуется в JSON, XML или другие форматы для передачи по сети (например, в REST API).
Зачем он нужен? Чтобы отвязать внутреннюю модель предметной области (сущности) от контракта API. Это позволяет:
- Отправлять клиенту только необходимые данные, скрывая внутреннюю структуру.
- Объединять данные из нескольких сущностей в один объект для ответа.
- Принимать от клиента данные, которые не полностью соответствуют внутренней модели.
Пример на Java:
// DTO для передачи данных о пользователе через API
public record UserDto(
Long id,
String username,
String email
) {}
// Использование в контроллере Spring
@GetMapping("/users/{id}")
public UserDto getUser(@PathVariable Long id) {
User user = userService.findById(id);
// Преобразуем сущность в DTO
return new UserDto(user.getId(), user.getUsername(), user.getEmail());
}