我的方法应该在哪一点停止抛出异常?

问题描述:

我使用DAO来访问我的数据库,并且这些dao方法抛出SQL异常,所以我让它使得dao方法抛出这个异常。我的方法应该在哪一点停止抛出异常?

然后我存取权限DAO的通过服务,它看起来像:

public class UserService implements Service { 

    public int addNewUser(String username, String password) throws SQLException { 
     User user = new User(username, password); 
     UserDao dao = new UserDao(source.getConnection()); 
     return dao.add(user); 
    } 
} 

这些方法抛出异常太多,但这种方式,我必须处理许多地方的SQL异常,有时它看起来相当糟糕。我应该在 服务或道路上处理例外情况吗?还是可以在任何地方检查异常情况?

+1

取决于。你是唯一使用图书馆的人吗?你是否想要为使用它的所有应用程序提供相同的错误处理? ...如果有人使用它,想要在UI上的特定错误消息,并且你在后端处理所有事情......这一切都取决于你试图实现的目标 – Stultuske

+1

尽可能地抛出它,以便用户将会显示一条错误消息,以便他知道某些错误。你也应该尝试分离GUI和业务逻辑 – XtremeBaumer

这可能会相当主观。你应该在哪里处理你的例外?这取决于你,没有规则。我的建议是:不断向上抛出异常,直到你到达想要登录的地方。如果要显示“数据库访问出错了 - 向最终用户发送消息”,则最简单的方法是在所有低层方法头文件中都有一个“throws SQLException”,并且只有*别的try-catch水平。

顺便说一句,你声明你“处理”SQL异常“在很多地方”,但向上抛出异常通常不称为处理。只有使用try-catch的部分“处理”异常,根据我的建议,这是您拥有的最高层。

编辑:作为this answer的状态,您可能想尝试在您的DAO中捕获它,并向上抛出一个不同的(更通用的)异常,因为较高层不一定具有所有这些数据库特定的用法细节。这将是一个更奇特的方式来做到这一点,虽然它可能是矫枉过正,这取决于你的情况。

+1

正是我所推荐的。再一次澄清:一种方法被允许正常返回(无一例外)的唯一情况是它是否完全履行其工作。否则,它必须告诉调用者有关失败的信息:抛出异常或让现有异常涟漪通过。 –