比如设计一个“用户查询”的webservice接口,有两种方式:
[code="java"]class User {
int id;
int groupId;
String name;
......
}
1.
public String getUsers(int userId, int groupId);
// 用这种方法可以返回一些错误信息,比如用户权限不够,参数错误,group不存在等等
// 缺点是只能将User对象的属性拼成字符串,客户端得到后要自己解析字符串得到对象
2.
public User[] getUsers(int userId, int groupId);
// 这种方法的缺点是只能得到两种结果,一是有数据,一是没有数据
// 如果没有得到数据,客户端很难判断是哪里出了问题,不好调试
[/code]
请各位帮忙分析一下,比较好的做法是什么?
或者我想的都是错的,请指出正确的方法...
[b]问题补充:[/b]
一楼的意思明白了,我现在再写一个类
[code="java"]public class UserResponse {
private String message;
private User[] users;
...
}
//接口改成:
public UserResponse getUsers();
//这样就即可以得到错误消息又可以得到User对象的结果了[/code]
再补充一个问题:
我现在有几个类似User这样的类,每个都得这样再写一个XXXResponse类封装
一下才可以,有没有更简单的办法可以不用为每个类写一个XXXResponse?
[b]问题补充:[/b]
有更好的方案了,返回Object[]
obj[0] = "错误提示";
obj[1] = new User[]{...};
这样就不用给每个类封装一个xxxResponse
在客户端强制转换一下类型就可以
接口方法定义如下:
public QueryUserRsp getUsers(int[] userId, int[] groupId)
QueryUserRsp :结果对象(包括 查询的User对象,还有操作码,或操作信息)
public class QueryUserRsp
{
private ParamType[] paramType; // 拓展信息 该对象 两个成功变量(key,Vale)
private int returnCode; // 返回码,标识成功或失败
private java.lang.String returnMsg; // 返回操作信息
}
提供参考
[code="java"]
public String getUsers(int userId, int groupId);
// 用这种方法可以返回一些错误信息,比如用户权限不够,参数错误,group不存在等等
// 缺点是只能将User对象的属性拼成字符串,客户端得到后要自己解析字符串得到对象
[/code]
首先,从getUsers代码命名上看,你是取想取User用户列表,而后面你说的错误信息,权限是两个不同的工作,我觉得你没必要在getUsers这里考虑错误,权限。
关于第二个,没理解到"如果没有得到数据,客户端很难判断是哪里出了问题,不好调试 "。
我觉得用第二种方式肯定是要好很多的。得到User后,想怎么玩都行。
别外,如果你真想一次查询用户实体得到用户相关的什么权限还有其它相关东西。你可以重新封装一个类。这里面包含用户列表,当然也包含你说的权限什么的。
这样没什么不好的,针对每步操作,所返回的结果清晰,如果有需要你可以做个供有方法:
[code="java"]
public class UserResponse {
private String message;
private Object[] users;
...
} [/code]