2013-10-17 35 views
3

我有一個Java Web應用程序,使用JPA存儲,並遵循MVC模式。在許多方法中,我必須返回一個List<Product>,我應該按其名稱命名。哪裏包括排序邏輯更好?哪裏更有效率或方便地對數據進行排序?

在這樣一個控制器方法,在Query本身:

public List<Product> obtainProductList() 
    { 
     Query query = em.createQuery("SELECT g FROM Product g ORDER BY g.name"); 
     List<Product> ret = query.getResultList(); 

     if (ret == null) 
     { 
     return new ArrayList<>(); 
     } 
     else 
     { 
     return ret; 
     } 
    } 

或者,也許在數據檢索網頁本身?:

public List<Product> getProducts() 
    { 
     products = controller.obtainProductList(); 
     //Sort the list by comparators, for example; 
     return this.products; 
    } 

的時刻Manager類目前,我正在通過第一種方法來完成這項工作,但我接受了新的方法。

+10

在查詢中使用它。數據庫針對此類操作進行了優化 – Mirco

+0

在服務器端進行排序不是一種選擇,尤其是當您需要對來自巨大聯接的標準進行排序時。讓數據庫完成這項工作,JPA打算讓你這樣做。 –

+0

除非你知道數據庫沒有特別的數據,否則將它作爲@ verbose-mode說的留在數據庫中。 – Cruncher

回答

4

排序大部分由DB服務器完成,當然,但在哪裏放置你的邏輯?,我的答案是不把它放到你的控制器。這種排序的數據是你的前端權利所需要的,但也許你有(必須)在其他許多地方使用它,所以控制器的行動責任只是提供它,但與服務/提供者/存儲庫協作負責提供排序後的數據,並且控制器動作應該傳遞給它。這樣,控制器就更容易測試,並且數據更易於重用。遵循Slim控制器 - Slim Views方法和SRP。

+0

+1提及SRP – david99world

相關問題