构造返回结果的在哪儿构造比较好呢?

这是我service层的代码

 @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){
                    response.setRc(Rc.RC_USER_STATUS);
                    response.setErrMsg("账号存在风险,已暂时锁定");
                }else if(accessToken == userLogin.getAccessToken() && deviceToken == userLogin.getDeviceToken()){
                    //验证正确, 返回新的accessToken
                    String newAccessToken = regenerateAccessToken(uid);

                    String sql = "UPDATE " + DEFAULT_TABLE_NAME + " SET " +
                            "accessToken='" + newAccessToken + "',"
                            + "online='1'";
                    userLoginDao.executeUpdate(sql);

                    response.setRc(Rc.RC_SUCCESS);
                    response.setData(newAccessToken);
                }else{
                    response.setRc(Rc.RC_USER_ACCESS_ERROR);
                    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;
    }

我想请问下,

  1. 这是service层,这里的Response 对象,应该在这里构造吗? 还是应该放到action层去?
    我觉得放在这里不妥的原因是, 一个action方法里可能调用多个service层的业务逻辑方法,肯定不能每个service的方法里都构造一个Response, 这样action方法里都没办法处理了.但是如果放到action层去, 就如这里的service方法, 这里的众多返回情况,我应该怎么反馈到action层去, 再构造一个对象吗?

阅读 3.2k
3 个回答

我想你的模式是:

action -> service -> dao

其实你为了保证action简单只做Controller, service之间也要互相独立,其实action和service中间还可以再加入一层, 比如叫biz,于是就变成

action -> biz -> services -> daos

所以,Servcie是应该有他的返回结果的,action只是把返回结果返回给客户端罢。 为了整合多个service的结果, 可以引入biz,当然,biz也有他的返回结果,这个返回结果就是最终客户端拿到的原型。

为什么不可以呢?
利用泛型 Response<T> 就好啦

还有人吗。谈谈各位的经验

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题