Ответ
DTO (Data Transfer Object) — это шаблон проектирования, представляющий собой простой контейнер для передачи данных между подсистемами приложения (например, из слоя контроллера в сервис или через сетевой интерфейс).
Основные характеристики:
- Только данные: Содержит поля, геттеры и сеттеры, но не содержит бизнес-логики.
- Сериализуемость: Часто реализует интерфейсы для сериализации (например,
Serializable). - Иммутабельность: Рекомендуется делать DTO неизменяемыми (immutable) для безопасности потоков и предсказуемости.
Пример иммутабельного DTO в Java:
public final class UserDto {
private final String username;
private final String email;
public UserDto(String username, String email) {
this.username = username;
this.email = email;
}
// Только геттеры, без сеттеров
public String getUsername() { return username; }
public String getEmail() { return email; }
}
Зачем использовать DTO?
- Сокращение вызовов: Объединение нескольких атрибутов в один объект для передачи за один раз.
- Разделение слоев: Позволяет изолировать внутреннюю модель предметной области (Entity) от модели, экспортируемой через API.
- Безопасность: Можно исключить чувствительные данные (например, хэши паролей), которые не должны покидать сервер.
- Адаптация формата: Преобразование данных в форму, удобную для клиента (например, объединение полей из нескольких сущностей).