我在一个带有遗留服务层的项目上工作,如果请求的记录不存在,或者由于调用者未经授权而无法访问,该服务层会在许多地方返回 null。我说的是 ID 要求的特定记录。例如,类似:
UserService.get(userId);
我最近推动了这个 API 的更改,或者补充了一个引发异常的新 API。关于已检查与未检查异常的争论随之而来。
从 JPA/Hibernate 等的设计者那里注意到,我建议未经检查的异常可能是最合适的。我的论点是不能合理地期望 API 的用户从这些异常中恢复,并且在 99% 的情况下,我们最多只能通知应用程序用户发生了一些错误。
将运行时异常传播到通用处理机制显然会减少处理边缘情况异常所涉及的许多复杂性和所需的分支处理。但是,围绕这种方法存在很多担忧(这是正确的)。
为什么 JPA/EJB 和 Hibernate 等项目的设计者选择使用未经检查的异常模型?有很好的理由吗?有什么优点/缺点。使用这些框架的开发人员是否仍应使用适配器包装器之类的东西处理接近抛出异常的位置的运行时异常?
我希望这些问题的答案可以帮助我们对自己的服务层做出“正确”的决定。