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;
      }
   }

或者可能在将数据检索到页面本身的时候在 Manager 类中?:

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

目前我正在通过第一种方法来做,但我对新方法持开放态度。

4

1 回答 1

4

当然,排序大部分由数据库服务器完成,但是将逻辑放在哪里?,我的答案是不要将其放入控制器中。您的前端需要此排序数据,但也许您必须(将不得不)在许多其他地方使用它,因此控制器操作的责任只是提供它,但与应该是的服务/提供者/存储库协作负责提供排序的数据,控制器动作应该只是传递它。这样控制器更容易测试,并且您的数据更可重用。遵循 Slim Controllers - Slim Views 方法和 SRP。

于 2013-10-17T19:39:13.993 回答