2006年10月29日星期日

扩展 Atlas 的客户端 Web Service 调用功能

Jeffrey Zhao最近在写客户端调用WebService的有关内容,那么我也来说说。Jeffrey Zhao说到了,Beta1中只有一个onComplete,onTimeout、onError、onAborted都没有了,这3个事件都整合到onComplete中,使用者需要自己在onComplete中手动判断到底属于哪个情况。另外Jeffery Zhao最近在讨论继承WebRequestExecutor中说到,XMLHttpExecute._onReadyStateChanged无法重写,所以要跟踪返回就要在WebRequestManager.completeRequest事件中进行。

这样看来,Beta1的WebService基础代码确实不太友好,我虽然还没有在Beta1用过WebService,但看样子有必要改善它。这次又到讨论继承哪个类?这个不一定要用继承嘛,除了我们熟悉的继承,以及JavaScript天生就支持的prototype模式,我们还可以考虑decorator模式。

由于我还没开始弄Beta1的WebService扩展,所以在这里仅能提供一段以前写下的用于Atlas June CTP的Web Service调用封装,调用方式为:
Cattism.BodyMaintainer.Web.Services.call(method, arg1, arg2, ..., configuration);
其中,method是带调用WebService的代理方法,之后arg1, arg2, ..., configuration就和直接调用WebService代理方法时使用的参数列表一致。该封装提供4大回调函数的一致性处理,例如如果你需要onError时一律将Exception信息通过debug.trace输出,那么你可以在Cattism.BodyMaintainer.Web.Services._onError中添加相应代码。你甚至还可以要求仅当调用时没指定onError回调时才将Exception信息通过debug.trace输出。

有人会想说我提供的代码看起来不太像decorator模式,对吗?其实我写的时候是完全根据自己的需求写的,写完才想起来这应该做成一个标准的decorator模式,不过也懒得改它了。在这里我只是希望给大家提供一个思路,就是当你觉得Atlas还不够好的时候你应该主动去添加一些代码让它能够满足你的需求,同时思维不一定要限制在基于Atlas的修修补补,你完全可以对Atlas进行二次封装制作一套适合你的个人工具库或者企业类库。

没有评论:

发表评论