DTO - объект для передачи данных между слоями приложения без бизнес-логики:
readonly class CreateUserDTO {
public function __construct(
public string $name,
public string $email,
public int $age,
) {}
public static function fromRequest(Request $request): self {
return new self(
name: $request->input('name'),
email: $request->input('email'),
age: (int) $request->input('age'),
);
}
}
// Использование
class UserService {
public function create(CreateUserDTO $dto): User {
return $this->repo->create($dto->name, $dto->email, $dto->age);
}
}DTO отличается от Entity (нет бизнес-логики, нет identity) и от Value Object (не обязан быть иммутабельным, нет поведения).