В своем приложении я использую DTO. Мое текущее решение в псевдокоде таково - работает хорошо:
ResponseEntity<EntityDTO> RestController.get(String uuid){
EntityDTO dto = Service.get(uuid) {
Entity entity = Repository.loadEntity(id);
return EntityDTO.from(entity);
}
return ResponseEntity<EntityDTO>( dto , HttpStatus.OK);
}
Недавно я увидел другое решение без этапа преобразования на уровне обслуживания.
Например, ваша сущность выглядит так:
@Entity
public class Book {
Long id;
String title;
String text;
.....
}
И текст слишком «тяжелый», чтобы отправить его с дырочной книгой, вы обычно создаете DTO следующим образом:
public class SlimBookDTO {,
static SlimBookDTO from(Book book) {
return new SlimBookDTO(book.id, book.title);
}
Long id;
String title;
.....
}
«Новое» (для меня) Решение чтобы создать только такой интерфейс:
public interface SlimBookDTO {
Long getId();
String getTitle();
}
И ваш BookRepository получает новый метод:
@Repository
public interface BookRepository extends JpaRepository<Book , Long> {
List<SlimBookDTO> findAllByTitle(String title);
}
С этим методом мне больше не нужен уровень обслуживания для прямых запросов . Это обычное дело? У кого-нибудь есть опыт в этом? Есть ли у него какие-то недостатки, которые я не вижу в небольшом приложении, но столкнусь с ними в большем масштабе?