假设我们有一个方法changeUserName(Long id,String newName)
它调用存储库的findUser(Long id)
找到正确的用户实体,然后更改其名称。
扔一个合适吗IllegalArgmentException
when findUser
返回空值?
或者我应该抛出一个自定义UserNotExistException
(扩展 AppException 扩展 RuntimeException)?
UPDATE:
RuntimeException
:
@nachokk @JunedAhsan 实际上我故意做出所有例外unchecked
,因为我觉得这样可以让客户端代码干净,方便调试,更节省。至于那些“未处理”的,我将把它们全部捕获在层的顶部,从而避免在用户界面上显示它们。
这是因为许多客户发现checked exceptions
然后就忽略它,在某些情况下他们不知道如何处理它。这是一个隐患。
澄清:
对不起,我的英语不好。我的意思是如果更改用户名应该抛出一个IllegalArgumentException
,不是findUser
方法。还有一个问题:如何区分illegal argument
from business rule violation
?
你应该使用UserNotExistException
。这个名字非常明确地说明了正在发生的事情。我认为你应该避免退货null
但如果你这样做了,你必须记录下来。
UPDATE
我在想,正如@JunedAhsan 所建议的那样,UserNotExistException
可能会更好CheckedException
(从 Exception 扩展,而不是 RuntimeException)。
从这个链接:未经检查的异常:争议 http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html
如果可以合理地预期客户端会从异常中恢复,
使其成为受检查的异常。如果客户无法采取任何措施来恢复
从异常中,使其成为未经检查的异常。
/**
* @return User found or throw UserNotExistException if is not found
*/
public User findUser(Long id) throws UserNotExistException{
//some code
User user = giveMeUserForSomePlace();
if(user == null){
throw new UserNotExistException();
}
return user;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)