Как правильно сделать DTO

DTO не призвано ускорить работу.

DTO это скорее паттерн организации кода. Представление данных, отличающееся по смыслу от модели, например (на мой взгляд наиболее популярный вариант) аггрегация нескольких моделей.

Что реально можно сократить -- это количество запросов фронтэнда к бэкенду.

Например, если сейчас делается N+1 запрос при получении списка клиентов (1 запрос на список из N клиентов + N запросов статуса на каждого клиента), то с помощью DTO можно вернуть за 1 запрос и список клиентов и статусы.

Ускорение работы может быть достигнуто за счёт меньшего количества сетевых обращений.

Например, DTO, возвращающее список клиентов с готовыми статусами:

JavaВыделить код

1
2
3

interface ClientListResponseDto {
  List<ClientResponseDto> getClients();
}

JavaВыделить код

1
2
3
4

interface ClientResponseDto {
  Client getClient();
  List<Status> getStatuses();
}

По модели данных ничего не понятно. И у клиента и у статуса есть список клиентов? Это опечатка?