Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/40: Рейтинг темы: голосов - 40, средняя оценка - 4.78
4 / 4 / 0
Регистрация: 26.06.2016
Сообщений: 115

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

02.06.2019, 19:36. Показов 7608. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
У меня такая проблема в моем проекте есть сущность
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
@Entity
@Table(name = "client")
public class Client implements Serializable, Diffable<Client>{
    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY)
    @BatchSize(size = 25)
    @Fetch(value = FetchMode.JOIN)
    @JoinTable(name = "status_clients",
            joinColumns = {@JoinColumn(name = "status_id", foreignKey = @ForeignKey(name = "FK_STATUS"))},
            inverseJoinColumns = {@JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "FK_USER"))})
    private List<Client> clients;
 
}
и есть сущность которая содержит лист таких клиентов
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
@Entity
@Table(name = "status")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Status implements Serializable {
    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY)
    @BatchSize(size = 25)
    @Fetch(value = FetchMode.JOIN)
    @JoinTable(name = "status_clients",
            joinColumns = {@JoinColumn(name = "status_id", foreignKey = @ForeignKey(name = "FK_STATUS"))},
            inverseJoinColumns = {@JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "FK_USER"))})
    private List<Client> clients;
}
При загрузке приложения. Мне на страницу надо выгрузить и все статусы и всех клиентов по статусам именно .
И получается так что идет очень большие запросы в базу данных
Мне было сказано сделать DTO на сущность клиента чтобы передавало именно небольшое количество данных
Но я не могу понять как это ускорит работу всего приложения если по сути каждый раз когда я хочу загрузить страницу у меня загружаются статусы и подгружаются из этого статуса клиенты из которых я могу создать конечно DTO но это все равно не ускорит процесс.
Кто бы что мог посоветовать в данной ситуации как грамотно сделать так, чтобы приложение стало работать быстрее и куда засунуть это DTO
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2019, 19:36
Ответы с готовыми решениями:

Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для дублирования
Я только начал изучать actionscript и прошу мне помочь. Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для...

Как сделать,у меня сервер обычная XP,как мне правильно сделать так,что бы некоторые компы отрезать от инета,но не от базы данных(К+ и 1С и т.п)
Система токая,инет идет на модем,с модема идет на хаб,с хаба на всех??? какой прогой лучше воспльзываться?? если есть возможнасть то...

Как сделать правильно?
static cell AMX_NATIVE_CALL f_MyOnePlagin(AMX *amx, cell *params) { int main() { char a; char ch; int...

3
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
03.06.2019, 20:26
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();
}
По модели данных ничего не понятно. И у клиента и у статуса есть список клиентов? Это опечатка?
0
4 / 4 / 0
Регистрация: 26.06.2016
Сообщений: 115
04.06.2019, 11:22  [ТС]
lemegeton, да извиняюсь опечатался. У клиента просто представлено поле Status.
Просто момент такой что у меня при загрузке на фронтенд загружаются сами статусы без промежутка в загрузке например клиентов. Т.к. они связаны и просто уже передаются сами статусы тем самым получается что к сожалению из-за большого количества клиентов идет большая нагрузка и поэтому мне надо передавать в статусе укороченный вариант клиента . Для этого и делалось DTO.

Java
1
2
3
4
5
6
7
8
9
   
Client{
 @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "status_id")
    @JoinTable(name = "status_clients",
            joinColumns = {@JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "FK_USER"))},
            inverseJoinColumns = {@JoinColumn(name = "status_id", foreignKey = @ForeignKey(name = "FK_STATUS"))})
    private Status status;
}
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.06.2019, 11:37
Дто не должно ниче знать про бд, jpa и вот это все. Создаешь класс, перечисляешь поля, которые тебе нужны, например, во вьюхе. Приходит запрос, из бд поднимаешь твои сущности, достаешь из них нужную инфу, создаешь из этого всего дто и отдаешь во вьюху (или куда там тебе надо). Все, нет ничего хитрого тут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.06.2019, 11:37
Помогаю со студенческими работами здесь

Как сделать правильно?
При масштабирование окна браузера, навигация остаётся на месте (если взять с меньшим разрешение то уже nav будет не посередине). Как...

как сделать правильно?
вот кусок кода: Form5: TForm5; implementation const zd114=14; {$R *.dfm} procedure TForm5.Button1Click(Sender: TObject);...

Как сделать правильно
Ситуация такая. Есть таблица, число записей около 4500 я джойню эту таблицу ещё с четырьмя потом делаю WHERE. WHERE отсекает 90% записей. ...

Как правильно сделать
есть мощный компьютер, туда установил на новый SSD Windows Server 2016. Хочу использовать как сервер терминалов для файловой 1с. Но на этом...

как сделать правильно ?
как сделать правильно ? &lt;form name=&quot;myform&quot; method=&quot;post&quot; action=&quot;?action=form&quot;&gt; &lt;input type=&quot;text&quot; value=&quot;&quot; name=&quot;inputname0&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru