【问题标题】:What is the best way of return type and exception handling of business method?业务方法的返回类型和异常处理的最佳方式是什么?
【发布时间】:2016-07-13 11:52:52
【问题描述】:

在返回类型和异常处理方面,以下哪种业务方法最好?

/**
 * Finds an entity identified by given arguments.
 * @param ...
 * @returns found entity of {@code null} if not found.
 */
public MyEntity find1(...) {
    try {
        return query.getSingleResult();
    } catch (final NoResultException nre) {
        return null;
    }
}

/**
 * Finds an entity identified by given arguments. Note that this method
 * may raise {@code NoResultException}.
 * See {@link TypedQuery#getSingleResult()}.
 * @param ...
 * @returns found entity
 */
public MyEntity find2(...) {
    ...
    return query.getSingleResult(); // may throw NoResultException
}

/**
 * Finds an entity identified by given arguments.
 * @param ...
 * @returns an optional of found entity; never {@code null}
 */
public Optional<MyEntity> find3(...) {
    try {
        return Optional.of(query.getSingleResult());
    } catch (final NoResultException nre) {
        return Optional.empty();
    }
}

【问题讨论】:

  • 在这种情况下,您对“最佳”的定义是什么?
  • @ThomasKilian 正确还是正确?

标签: ejb business-logic


【解决方案1】:

您的所有变体都是正确的。它们都是对异常做出反应的有效实现。

使它们不合适的是一组编码规则,它告诉您必须返回可选项,始终在内部捕获异常或其他任何东西。所以只要你没有这样的规则,或者你遵守它们,你就没事。

【讨论】:

    【解决方案2】:

    在返回类型和异常处理方面,以下哪种业务方法最好?

    find1 绝对不好,因为它返回 null 并使用异常来控制流程。

    find2 绝对适用于预期实体存在的情况。

    如果 find3 在没有 try-catch 块的情况下被重写,那么它也适用于实体可能不存在的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2011-04-29
      • 1970-01-01
      • 2020-12-16
      • 2012-11-20
      • 2021-02-22
      • 1970-01-01
      相关资源
      最近更新 更多