我有一个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;
}
}
或者在将数据检索到页面本身时,可能在Manager类中?:
public List<Product> getProducts()
{
products = controller.obtainProductList();
//Sort the list by comparators, for example;
return this.products;
}
目前我正在通过第一种方法实现这一目标,但我对新的方式持开放态度。
答案 0 :(得分:4)
排序大部分是由DB服务器完成的,但是在哪里放置你的逻辑? 我的回答是不要把它放进你的控制器。您的前端权利需要这些已排序的数据,但您可能(必须)在许多其他地方使用它,因此控制器操作职责只是提供它,但与服务/提供者/存储库协作应该是负责提供排序数据和控制器动作应该只是通过它。这种方式控制器更容易测试,您的数据更可重用。遵循超薄控制器 - 超薄视图方法和SRP。