java - 在哪里对数据进行排序更高效或更方便?

标签 java jpa

我有一个 Java Web 应用程序,使用 JPA 进行存储,并遵循 MVC 模式。在许多方法中,我必须返回 List<Product>我应该按它的名字来订购。在哪里包含排序逻辑更好?

在像这样的 Controller 方法中,在 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;
   }

目前我使用的是第一种方法,但我愿意接受新的方法。

最佳答案

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

关于java - 在哪里对数据进行排序更高效或更方便?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19430435/

相关文章:

java - EclipseLink 2.7.0 和 JPA API 2.2.0 - 签名不匹配

java - 为什么 Java 找不到 CLASSPATH 中的类?

java - 可以逃离 JUnit 测试用例吗?

java - Selenium ,Java,waitForCondition

java - 如何从简单的正则表达式生成字符串?

java - 加入笛卡尔积

hibernate - 我应该如何覆盖具有复合主键的实体中的 equals/hashCode?

java - 更新子实体但保存父实体会导致 ObjectOptimisticLockingFailureException

mysql - @EmbeddedId 抛出 IdIdentifierGenerationException : null id generated even with @GeneratedValue(strategy = GenerationType. 自动)

java - ImageJ:拉伸(stretch)直方图与均衡