Spring Data: когда используются проекционные интерфейсы и DTO-проекции? - PullRequest
0 голосов
/ 04 мая 2018

У меня такая ситуация:

Он собирается работать с Spring Data и работать с определенным набором полей @Entity

Два предложения полностью действительны для меня:

  1. DTO projections
  2. Projection interfaces

Еще больше, в spring-data-examples появляется оба вместе (я знаю для примера):

Таким образом:

  1. Когда обязательно использовать одно поверх другого и почему?
  2. Существует ли стоимость исполнения одного над другим?

Примечание в разделе Проекции на основе классов (DTO) гласит следующее:

Другой способ определения прогнозов - использование DTO типа значения (Данные Transfer Object), которые содержат свойства для полей, которые должен быть восстановлен. Эти типы DTO могут быть использованы именно в используются интерфейсы проецирования, за исключением того, что происходит и вложенные проекции не могут быть применены.

Кажется, что преимущества: except that no proxying happens и no nested projections can be applied

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Подход DTO

Pro

  • Простой и прямой вперед

Con

  • Это приведет к увеличению количества кода, так как вам придется создавать класс DTO с помощью конструктора и методов получения / установки (если вы не используете Project Lombok, чтобы избежать шаблонов) код для DTO).

  • Вложенные проекции не могут быть применены.

Проекция

Pro

  • Меньше кода, поскольку используются только интерфейсы.

  • Могут применяться вложенные проекции

  • Динамическая проекция позволяет вам написать один общий метод репозитория для возврата различное подмножество атрибутов в объекте объекта в зависимости от потребностей клиента.

Con

  • Spring генерирует прокси во время выполнения
  • Запрос может вернуть весь объект сущности из базы данных в слой Spring, хотя урезанная версия (через проекцию) возвращается из слоя Spring в клиент. Я не был уверен в этом конкретном недостатке, надеясь, что кто-то отредактирует этот ответ в случае необходимости.

Если вам нужна вложенная или динамическая проекция, вам, вероятно, нужен подход Projection, а не DTO.

Подробнее см. официальный документ Spring .

0 голосов
/ 08 июня 2018

Я думаю, что DTO был первым возможным решением для работы с небольшим набором данных от сущностей. Сегодня многие операции также можно выполнять с помощью проекций, но вы должны быть осторожны с производительностью. Если вы видите этот пост Янссена Сущности или DTO - Когда вы должны использовать какую проекцию? вы заметите, что DTO имеют лучшую производительность, чем проекции для операций чтения.

Если у вас нет проблем с производительностью, прогнозы будут более изящными.

...