java抛异常 代替返回_请问业务层方法是抛出一个异常好还是返回一个结果更好…

  • Post author:
  • Post category:java


@Override

public Response checkUserToken(long uid, String accessToken, String deviceToken){

Response response = new Response();

//TODO 先到session中找

try {

UserLogin userLogin = userLoginDao.getUserLoginByUid(uid);

if(userLogin != null) {

if(userLogin.getStatus() !=-1){

if(accessToken == userLogin.getAccessToken() && deviceToken == userLogin.getDeviceToken()){

//验证正确, 生成新的accessToken

String newAccessToken = regenerateAccessToken(uid);

//保存到数据库

String sql = “UPDATE ” + UserLoginDao.DEFAULT_TABLE_NAME + ” SET ” +

“accessToken=?, online=?”;

Object[] args = new Object[]{newAccessToken, 1};

int[] argTypes = new int[]{Types.VARCHAR, Types.TINYINT};

userLoginDao.executeUpdate(sql, args, argTypes);

response.setRc(Rc.RC_SUCCESS);

response.setData(new LoginDTO(uid, accessToken, deviceToken));

}else{

response.setRc(Rc.RC_USER_ACCESS_ERROR);

response.setErrMsg(“验证失败,请重新登陆”);

}

}else{

response.setRc(Rc.RC_USER_STATUS);

response.setErrMsg(“账号存在风险,已暂时锁定”);

}

}else{

response.setRc(Rc.RC_USER_INVALID);

response.setErrMsg(“不合法用户请求”);

}

}catch (Exception e){

Yin.logError(e, getClass());

response.setRc(Rc.RC_DB_ERROR);

response.setErrMsg(“数据库异常”);

}

return response;

}

这是一个业务层方法, 里面我直接try catch捕获了dao层的可能的异常. 并作为一个对象返回.

我的考虑是:这么做的在action层就无需try, catch了,因为统一通过Response返回结果

我看有的人是封装了一个业务层的异常, 返回给action

这两种方法哪个好些?为什么?

另外, 如果是封装业务层的异常,这个按照什么原则分的呢? 比如 前台传个id, 如果这个id没找到,难道我要构造个UserNotFoundException, 而不是在Response对象里加一个status?

小弟学程序至今, 一直觉得自己写的代码很糟糕, 最近开始看代码大全这本书, 觉得受益匪浅, 并重新修改了代码.麻烦各位前辈解惑的同时, 能指点一下如上这段代码. 请指教



版权声明:本文为weixin_29430629原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。