这是我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;
}
我想请问下,
这是service层,这里的Response 对象,应该在这里构造吗? 还是应该放到action层去?
我觉得放在这里不妥的原因是, 一个action方法里可能调用多个service层的业务逻辑方法,肯定不能每个service的方法里都构造一个Response, 这样action方法里都没办法处理了.但是如果放到action层去, 就如这里的service方法, 这里的众多返回情况,我应该怎么反馈到action层去, 再构造一个对象吗?
我想你的模式是:
其实你为了保证action简单只做Controller, service之间也要互相独立,其实action和service中间还可以再加入一层, 比如叫biz,于是就变成
所以,Servcie是应该有他的返回结果的,action只是把返回结果返回给客户端罢。 为了整合多个service的结果, 可以引入biz,当然,biz也有他的返回结果,这个返回结果就是最终客户端拿到的原型。