服务层框架设计(二)——服务请求示例
作为表现层(Presentation)要请求服务的话,只需要有以下几种请求方式就可以了。
下面以登录为例:
1. 直接请求
request[“UserId”]=this.txtUser.Text.Trim();
request[“UserPwd”]=this.txtPwd.Text.Trim();
Response response=request.GetResponse();
if(response.IsError){
ShowError(response.ErrorMessage);
}
else{
if((bool)response[“IsLogin”]){
//login successfully
}
else{
ShowError(“Login Failed.”);
}
}
这种请求的好处在于简洁,但坏处在于"UserId","UserPwd"毕竟是字符串,不利于编译器检查。另外在(bool)response["IsLogin"]类型转换时会让人胆颤心惊。另外有一个不好不坏的地方在于它虽如此,但参数类型,数量都因Xml自动检测。所以你不能随便请求,必须遵循规则。这个规则在上一章节的XML里体现出来了。
2. 封装请求
request.UserId=this.txtUser.Text.Trim();
request.UserPwd=this.txtPwd.Text.Trim();
if(request.IsError){
ShowError(response.ErrorMessage);
}
else{
if(response.IsLogin){
//login successfully
}
else{
ShowError(“Login Failed.”);
}
}
这种方式优点是所有类型都是强数据类型,对于编译器来说比较安全。但它需要额外一层来构造LoginRequest, LoginResponse两个类,当然这两个类都分别继承于Request. Response。只是这个时候业务规则的XML显得有点多余,虽然也能进行参数类型和数量检测,但毕竟已经是强数据类型了。
3. 通过Web Services请求
直接将Request, Response或LoginRequest, LoginResponse序列化放在Web服务上进行操作。代码几乎同上,只是变成了引用服务而已。
其实这是最好的一种方式,也是最标准的一种方式。目前希望能在今后研究分布式WCF服务上能够应用。
作者:周利华
出处:http://www.cnblogs.com/architect/archive/2009/03/17/1413979.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。