首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 软件水平考试 > 复习资料 > 多媒体技术员 > 正文

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定义成动态类,然后直接设置成员提交这样就省下每个交互都定义一个类型出来这么麻烦。但作为一个服务接口调用成员越明确越好,因为程序是要经常修改和维护的;不过是不是要这样做就是团队约束规范问题了。
1 2  下一页
文章责编:liujun1987  
看了本文的网友还看了
文章搜索
软件水平考试栏目导航
版权声明:如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。