Flex扩展HTTPService简化调用接口定义

Flex提供MXML来描述一个HTTPService,看上可以简化开发人员的工作,但实际上这种描述HTTPService的方式很容易产生重复代码导致代码不好维护和扩展。数据交互接口唯一定义对系统的维护非常有利,但基于AS定义HTTPService也是一件烦琐的事情;那如何做才能够达到方便地定义接口呢。

  接口定义

  以下是定义一个登陆的HTTPService

  public class ILogin extends HttpBase
  {
    public function ILogin(method:String="get", result:Function=null)
    {
      super("userlogin", method, result);
    }
    public var UserName:String;
    public var UserPWD:String;
    public var ImgSN:String;
    public var ImgKey:String;
  }

  看上非常简单,只需要继承HttpBase然后效需要提交的参数定义成Public成员即可以。对于构造函数参数下介绍HttpBase的时候讲述;对于这个接口又是怎样调用的呢。

var send:ILogin =new ILogin(      "get",function(data:XML,error:Boolean){
           if(!error)
           {
           }
         });
         send.UserName= txtName.text;
         send.UserPWD=txtPWD.text;
         send.ImgKey= ic.ImageKey();
         send.ImgSN=ic.ImageSN();
         send.Open();

  如果并不想考虑太多处理,只关心登陆处理可以这样定义

var send:ILogin =new ILogin();
send.UserName= txtName.text;
send.UserPWD=txtPWD.text;
send.ImgKey= ic.ImageKey();
send.ImgSN=ic.ImageSN();
send.Open();

  服务端代码

  对于服务端代码就可以根据自己需来处理,jsp,asp,asp.net,php都是一样只要接收http请求即可。为了便于理解把服务端代码顺便贴出来:

  [NClay.Web.Service.ActionMapper]
  public class UserLogin : ActionBase
  {
    protected override void OnGet()
    {
      ImageValidate.Check();
      User user= _UserService.Login(UserName, UserPWD);
      if(user ==null)
        throw new Exception("用户名或密码不正确!");
      if (user != null && !user.Enabled)
        throw new Exception("用户已经被系统禁用,请与管理员联系!");
      mLoginer = user;
      mIsLogin = mLoginer != null;
      FormsAuthentication.SetAuthCookie(Loginer.UserName, true);
      LoginID = Loginer.UserID;
      LoginName = Loginer.UserName;
      base.OnGet();
    }
    public string UserName
    {
      get;
      set;
    }
    public string UserPWD
    {
      get;
      set;
    }
    [NClay.Web.Service.OutputXml]
    public int LoginID
    {
      get;
      set;
    }
    [NClay.Web.Service.OutputXml]
    public string LoginName
    {
      get;
      set;
    }
    public NClay.Web.Actions.ImageValidate ImageValidate
    {
      get;
      set;
    }
  }

 HttpBase的定义

  该HttpBase是针对本人现有需求所制定的,所以并不一定适合你的需要;但作为一个参考

public class HttpBase
  {
    private var mService:HTTPService=null
    private var mResult:Function=null;
    private var mFristSearch:Boolean=false;
    public var _TimeSlice:Date;
    public function GetService():HTTPService
    {
      return mService;
    }
    public function HttpBase(api:String,method:String="get",result:Function=null)
    {
      mService = new HTTPService();
      mService.useProxy=false;
      mService.url=GetServiceUrl()+api;
      mService.resultFormat="e4x";
      mService.method=method;
      mService.addEventListener(FaultEvent.FAULT,HFSoftCoreFun.onFault);
      mService.addEventListener(ResultEvent.RESULT,OnResult);
      mResult=result;
    }
    protected virtual function GetServiceUrl():String
    {
      return "service.aspx?do=";
    }
    private function OnResult(event:ResultEvent)
    {
      var data:XML=XML(event.result);
      var iserror:Boolean=HFSoftFx.HFSoftCoreFun.IsError(data);
      if(mResult!=null)
       mResult(data,iserror);
    }
    public function get FirstSearch():Boolean
    {
      return mFristSearch;
    }
    public function Open(firstSearch:Boolean=false)
    {
      _TimeSlice =new Date();
      mFristSearch=firstSearch;
      mService.send(this);
    }
  
  }
代码也非常简单,就是在httpservice的基础上包装一下。其实了解AS的朋友应该可以看得出对于动态语言来说直接把HttpBase定义成动态类,然后直接设置成员提交这样就省下每个交互都定义一个类型出来这么麻烦。但作为一个服务接口调用成员越明确越好,因为程序是要经常修改和维护的;不过是不是要这样做就是团队约束规范问题了。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值