2014-08-19 1 views
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); 

ответ

1

Это субъективный вопрос, который обычно не приветствуют на SO. Во всяком случае, я оставил бы такие вещи, как , заказывая, Сортировка клиенту. Таким образом, он более надежный. Возможно, разные пользователи имеют разные критерии для заказа.

+0

Дизайн часто субъективен. Во всяком случае, оставляя сортировку для клиента, просачивается через все слои. С точки зрения инкапсуляции это богохульство. Я все еще чувствую, что это жесткое кодирование в инструкции JPQL. – Stephane

+0

действительно зависит от вас. Чтобы понять менталитет, который я получил, когда был дан ответ: представьте приложение, которое предоставляет сетку информацию для данного клиента, несколько столбцов. Вы жестко кодируете сортировку в фоновом режиме. Клиент хочет увидеть записи с наивысшим/самым низким значением столбца12, но поскольку вы его жестко закодировали ... он/она не может это сделать –

+0

Я полностью согласен с вашим прецедентом. Я пропущу сортировку клиенту только в том случае, если прецедент предписывает варианты сортировки нескольких столбцов. В противном случае сортировка останется в выражении JPQL. – Stephane