高复用服务响应对象得设计思想及抽象封装
1.Common文件夹中装入许多的公共类,这些公共类为了满足高复用且具有服务响应进行了抽象封装。
2.在名为ResponseCode的枚举类中存在
ERROR(1,“ERROR”),
SUCCESS(0,“SUCCESS”)的枚举状态。
构造函数等代码如下
private final int code ;
private final String desc ;
ResponseCode(int code, String desc) {
this.code=code;
this.desc=desc;
}
public int getCode()
{
return code;
}
public String getDesc()
{
return desc;
}
上面的代码块会在“服务响应类”中被大量使用
3.服务响应类
public class ServerResponse implements Serializable //泛型好处可以指定里面的内容,也可以不指定里面的强制内容
服务响应类的成员变量
private int status;
private String msg;
private T data;
服务响应类拥有四个构造方法
private ServerResponse(int status)
{
this.status=status;
}
private ServerResponse(int status,T data)
{
this.status=status;
this.data=data;
}
private ServerResponse(int status,String msg,T data)
{
this.status=status;
this.msg=msg;
this.data=data;
}
private ServerResponse(int status,String msg)
{
this.status=status;
this.msg=msg;
}
这四个构造方法都有自己的用处,比如当响应成功时,会返回成功所需的信息
public static <T> ServerResponse<T> createBySuccessMessage(String msg)
{
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg);
}
就是返回一个拥有着成功信息的“服务响应类” 这时通过最后一个构造函数,生成这个“服务响应类”。
4.什么时候会用到这个服务响应类呢,
(1)比如说:
public ServerResponse<String> logout(HttpSession session)//登出
{
session.removeAttribute(Const.CURRENT_USER);
return ServerResponse.creatBySuccess();
}
上述代码实现的时登出功能,登出功能实现在controller层,登出实际上就是删除指定session中的绑定对象,session.removeAttribute的作用。
重点是这里就调用了服务响应类,登出成功会返回一个这样的服务响应类。
(2)还比如说下面的这个实现注册的代码:
public ServerResponse<String> register(User user) {
ServerResponse validResponse=this.checkValid(user.getUsername(),Const.USERNAME);
if(!validResponse.isSuccess())
{
return validResponse;
}
validResponse=this.checkValid(user.getEmail(),Const.EMAIL);
if(!validResponse.isSuccess())
{
return validResponse;
}
user.setRole(Const.Role.ROLE_CUSTOMER);
//MD5加密
user.setPassword(MD5Util.MD5EncodeUtf8((user.getPassword())));
int resultCount = userMapper.insert(user);
if (resultCount == 0) {
return ServerResponse.createByErrorMessage("注册失败");
}
return ServerResponse.createBySuccessMessage("注册成功");
}
先不管注册是怎样实现的,我们可以看到最后显示交互信息注册成功和注册失败时,就是使用的“服务响应类”。这种服务响应类就实现了高复用的服务响应。
在用户模块中基本上所有功能都能满足高复用服务响应对象的设计思想,通过java的抽象分装就可以做到这一点。
设计思路
使用泛型让返回数据多样化,且可以让返回对象统一;
声明状态字段,表示服务响应状态;
声明描述字段,描述当前状态的原因;
声明泛型数据字段,用于返回多种类型的数据,实现高复用 。