Как расшифровывается DTO?

«Как расшифровывается DTO?» — вопрос из категории Архитектура, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DTO (Data Transfer Object) — это шаблон проектирования, представляющий собой простой контейнер для данных, предназначенный исключительно для передачи между слоями или системами.

Основные характеристики DTO:

  • Только данные: Содержит поля (часто только для чтения) и методы доступа к ним (геттеры), но не содержит бизнес-логики.
  • Неизменяемость (Immutable): Часто реализуется как неизменяемый объект, что делает поток данных предсказуемым и безопасным для многопоточности.
  • Сериализуемость: Легко преобразуется в JSON, XML или другие форматы для передачи по сети (например, в REST API).

Зачем он нужен? Чтобы отвязать внутреннюю модель предметной области (сущности) от контракта API. Это позволяет:

  1. Отправлять клиенту только необходимые данные, скрывая внутреннюю структуру.
  2. Объединять данные из нескольких сущностей в один объект для ответа.
  3. Принимать от клиента данные, которые не полностью соответствуют внутренней модели.

Пример на 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());
}