0
У меня есть дизайн вопрос:Жесткое кодирование предложений заказа? Или предлагает параметр сортировки?
Должен ли я жестко закодировать заказ по пункта в формулировках запроса?
public Page<Admin> search(String searchTerm, Pageable page) {
Pageable pageable = new PageRequest(page.getPageNumber(), page.getPageSize());
return adminRepository.search(searchTerm, pageable);
}
@Query("SELECT a FROM Admin a WHERE LOWER(a.firstname) LIKE LOWER(CONCAT('%', :searchTerm, '%')) OR LOWER(a.lastname) LIKE LOWER(CONCAT('%', :searchTerm, '%')) OR LOWER(a.email) LIKE LOWER(CONCAT('%', :searchTerm, '%')) OR LOWER(a.login) LIKE LOWER(CONCAT('%', :searchTerm, '%')) ORDER BY a.lastname ASC, a.firstname ASC")
public Page<Admin> search(@Param("searchTerm") String searchTerm, Pageable page);
Или я должен позволить выбор конечному пользователю:
public Page<Admin> search(String searchTerm, Pageable page) {
return adminRepository.search(searchTerm, page);
}
@Query("SELECT a FROM Admin a WHERE LOWER(a.firstname) LIKE LOWER(CONCAT('%', :searchTerm, '%')) OR LOWER(a.lastname) LIKE LOWER(CONCAT('%', :searchTerm, '%')) OR LOWER(a.email) LIKE LOWER(CONCAT('%', :searchTerm, '%')) OR LOWER(a.login) LIKE LOWER(CONCAT('%', :searchTerm, '%'))")
public Page<Admin> search(@Param("searchTerm") String searchTerm, Pageable page);
Дизайн часто субъективен. Во всяком случае, оставляя сортировку для клиента, просачивается через все слои. С точки зрения инкапсуляции это богохульство. Я все еще чувствую, что это жесткое кодирование в инструкции JPQL. – Stephane
действительно зависит от вас. Чтобы понять менталитет, который я получил, когда был дан ответ: представьте приложение, которое предоставляет сетку информацию для данного клиента, несколько столбцов. Вы жестко кодируете сортировку в фоновом режиме. Клиент хочет увидеть записи с наивысшим/самым низким значением столбца12, но поскольку вы его жестко закодировали ... он/она не может это сделать –
Я полностью согласен с вашим прецедентом. Я пропущу сортировку клиенту только в том случае, если прецедент предписывает варианты сортировки нескольких столбцов. В противном случае сортировка останется в выражении JPQL. – Stephane