【问题标题】:java function returning values via custom exception is a good approach?java函数通过自定义异常返回值是一个好方法吗?
【发布时间】:2013-07-30 13:42:53
【问题描述】:

java 函数通过异常返回值是最佳实践还是有什么缺点?我的要求是一个 java DAO 函数返回给我一个大小有限的数据集合(基本上是延迟加载)。我需要得到集合的总大小。所以我的想法是,如果我将一个标志传递给 java DAO 函数以获得总计数,那么挑战就是从 java DAO 函数返回计数。可以通过异常获得计数吗?这是一个好方法吗?任何其他解决方案总是受欢迎的。

编辑:
例外的原因是:让我解释一下用例:我有一个动作层和一个道层。现在在动作层中,我使用了“5(if,else)条件”来从数据库中获取不同类型的数据收集,但数量有限。现在我的下一个行动任务是在没有限制的情况下获取集合的总数。怎么做是避免更多 if 条件的问题。所以我的想法是使用 EXCEPTION 返回总计数并在动作层处理干净。这里我需要总数或数据列表。

【问题讨论】:

    标签: java return


    【解决方案1】:

    java 函数通过异常返回值是一种最佳实践

    我不会考虑这种好的做法。 Use Exceptions for exceptional circumstances only, not when handling normal program flow.

    挑战是从 java DAO 函数返回计数

    您始终可以返回一个容器而不是单个值。将所有想要返回的值添加到容器对象中,然后返回容器对象:

    public MyContainer getDAOListAsContainer() {
       MyList myList = ...;   // get the list from somewhere
       int mySize = 42;
       return new MyContainer(myList, mySize);
    }
    

    除此之外,java 集合类通常已经通过 size() 方法“知道”它们的大小。因此,如果您已经有类似 List 的东西,您可以得到它的大小

    List result = getDAOList();
    // result.size() now contains the number of elements
    

    【讨论】:

    • 例外的原因是:让我解释一下用例:
    • 例外的原因是:让我解释一下用例:我有一个动作层和一个道层。现在在动作层中,我使用了“5(if,else)条件”来从数据库中获取不同类型的数据收集,但数量有限。现在我的下一个行动任务是在没有限制的情况下获取集合的总数。怎么做是避免更多 if 条件的问题。所以我的想法是使用 EXCEPTION 返回总计数并在动作层处理干净。这里我需要总数或数据列表。
    【解决方案2】:

    异常表示异常行为 - 即发生了您未预料到的事情。关于应用程序的状态,您所知道的只是出现了问题;您实际上并不知道计数是否返回(因为数据库可能是正确的,但您的 ORM 层不一致)。

    我不会考虑从异常中获取“嘿 - DAO 出了点问题”之外的任何信息。

    【讨论】:

    • 例外的原因是:让我解释一下用例:我有一个动作层和一个道层。现在在动作层中,我使用了“5(if,else)条件”来从数据库中获取不同类型的数据收集,但数量有限。现在我的下一个行动任务是在没有限制的情况下获取集合的总数。怎么做是避免更多 if 条件的问题。所以我的想法是使用 EXCEPTION 返回总计数并在动作层处理干净。这里我需要总数或数据列表。
    【解决方案3】:

    我认为这不是一个好方法。

    使用异常来获取信息甚至控制流都会对性能产生影响,因为java在创建和抛出异常的过程中需要收集大量的信息。

    【讨论】:

      【解决方案4】:

      这不是一个好习惯 - 通常没有人以这种方式使用异常。
      因此,以后维护代码的人会感到困惑/烦人。

      【讨论】:

      • 例外的原因是:让我解释一下用例:我有一个动作层和一个道层。现在在动作层中,我使用了“5(if,else)条件”来从数据库中获取不同类型的数据收集,但数量有限。现在我的下一个行动任务是在没有限制的情况下获取集合的总数。怎么做是避免更多 if 条件的问题。所以我的想法是使用 EXCEPTION 返回总计数并在动作层处理干净。这里我需要总数或数据列表。
      【解决方案5】:

      使用POJO封装两者,然后返回。

      void CollectionAndSize methodInDAO(boolean neededCollection, boolean neededTotalCount)
      {
      CollectionAndSize cas = new CollectionAndSize();
      
      //Some code here.
      if(neededCollection)
          { 
          collection = getLimitedCollection();
          cas.setCollection(collection);
          } 
      
      if(neededTotalCount)
          { 
          totalRecords = = getnumberOfRecords();
          cas.setTotalRecords(totalRecords );
          }
      return cas;
      }
      

      【讨论】:

      • 例外的原因是:让我解释一下用例:我有一个动作层和一个道层。现在在动作层中,我使用了“5(if,else)条件”来从数据库中获取不同类型的数据收集,但数量有限。现在我的下一个行动任务是在没有限制的情况下获取集合的总数。怎么做是避免更多 if 条件的问题。所以我的想法是使用 EXCEPTION 返回总计数并在动作层处理干净。这里我需要总数或数据列表。
      • 根据您的用例修改。异常方式绝不是干净的处理方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2019-05-07
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多