嗯,这类问题总是有基于意见的答案。尽管有这些做法称为最佳做法。您可能会看到很多不同类型的意见。
既然你在谈论空指针异常,你会看到更多不同的意见:)
另一方面,我怎么看?大多数人可能会同意,您只需在 dao 层上抛出异常即可在其他点处理。
显然,您在这里谈论的是 Web 应用程序。让我们假设它不是空指针异常,而是另一种异常(因为我认为空指针异常应该被不同地考虑)
1- NullPointerException 以外的异常:
业务逻辑是在服务层处理的,所以如果数据库上出现异常,比如约束异常,通常是你应该处理这些异常的层,并向相关方提供适当的详细消息(屏幕上的错误消息对于用户,日志文件中的适当信息消息等)。因为业务逻辑和逻辑上应该如何处理异常应该在这里。
我可以越来越多地从其他角度思考,这是一个与其他主题相关的广泛主题。涉及事务、服务层的角色等。
2- 空指针异常:
我认为空指针异常不应该出现在经过良好测试的应用程序中。这是因为,如果您要对某些数据(传递的参数、变量等)执行某些逻辑,您应该已经初始化了执行该逻辑所需的所有信息。
如果没有,您应该只检查一个值是否已初始化,并抛出一个表示数据未初始化的异常(NullPointerException 实际上也是如此。)但是您是否应该始终执行空检查?那是另一个主题,它是关于谁调用您的代码,如果它是以实际上无法使用空值调用的方式编码的代码块(私有方法,某些仅由某些代码使用的后端代码等)
所以你知道这是一个很长的故事。但是一个好的做法是抛出已检查的异常并让运行时异常在应该处理的地方处理。 (当然不总是)