请问业务层方法是抛出一个异常好还是返回一个结果更好-问答-阿里云开发者社区-阿里云

开发者社区> 蛮大人123> 正文

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

2016-03-10 14:02:23 3156 1
@Override
    public Response<LoginDTO> checkUserToken(long uid, String accessToken, String deviceToken){
        Response<LoginDTO> 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?

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 18:57:32

    错误码在面向过程的语言中非常常见,但是在面向对象的过程中,使用异常来处理多一点。
    使用错误码的缺点是:
    1、对错误的检测不是强制的
    2、代码充斥各种if else的错误码判断
    使用异常的好处是:
    1、对错误的检测是强制的,你必须处理或者上抛异常
    2、代码不必对各种状态码进行判断,有异常直接抛出终止往下运行
    3、对于错误有堆栈可以追踪。

    0 0
相关问答

4

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 123765浏览量 回答数 4

17

回答

【大咖问答】对话PostgreSQL 中国社区发起人之一,阿里云数据库高级专家 德哥

阿里ACE 彭飞 2019-07-10 09:36:10 974221浏览量 回答数 17

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157129浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 333937浏览量 回答数 8

38

回答

[@饭娱咖啡][¥20]对于慢sql有没有什么比较实用的诊断和处理方法?

江小白太白 2018-10-30 18:47:38 141687浏览量 回答数 38

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146816浏览量 回答数 22

2

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 126846浏览量 回答数 2

8

回答

flink sql 支持checkpoints吗?

游客izljdlkgbdwfc 2019-07-10 17:46:37 121201浏览量 回答数 8

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 256912浏览量 回答数 38

21

回答

请教一下数据量有100万条左右要什么配置?

易网网络 2013-03-27 15:18:02 192368浏览量 回答数 21
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载