今天写代码,突然想到了一个问题就是flex 中remoteobject 的生存周期问题。没有测试觉得应该是一样的,有时间测试一下。
还有看到一篇文章不错,全文引用下面。
来源:http://hi.baidu.com/finallygo/blog/item/fbe7c5ed2184854379f0556d.html
flex+blazeDs与Ext+dwr比较
感觉flex+blazeDs约等于Ext+dwr,为什么这么说呢?
首先flex与ext都是页面显示的技术,也就是说与后台的语言是无关的,两者的区别就在于一个页面技术的实现是基于flash player的,另一个不用,使用的语言上来说是很相似的,flex是用mxml来画控件,处理主要是通过actionscript来实现的,而ext则全部都是用javascript来实现的(实际中你会发现actionscript与javascript是十分相似的).
接下来说说他们连接后台的技术,因为我是学java的,所以就介绍连接java的了,blazeDs与dwr感觉都是充当一个中间件的角色,也就说通过这两种技术都可以直接调用后台的方法,而且你会发现这两者的相似程度也是惊人的,使用上基本是一致的.
所以说,如果你以前学的是Ext+dwr的人转flex可以说是非常轻松的,而且我发现后台的方法也基本上不需要改变,真的可以说很完美了.
下面来用例子简单的对比下两者的相似之处:
首先介绍dwr的,dwr配置一个Service是这样的
<create creator="new" javascript="JGoodsInfoService">
<param name="class" value="com.finallygo.countmoney.service.GoodsInfoService"/>
</create>
而blazeds中如下:
<destination id='JGoodsInfoService'>
<properties>
<source>com.finallygo.countmoney.service.GoodsInfoService</source>
</properties>
</destination>
发现了没两者是惊人的相似啊,呵呵
接下来对比下两者的使用
dwr的使用是:
在页面里添加如下的引用:
<script type="text/javascript" src="dwr/interface/JGoodsInfoService.js"></script>
blazeDS的使用是:
在"页面"里添加
<s:RemoteObject id="JGoodsInfoService" destination="JGoodsInfoService" endpoint="/BlazeDSServer/messagebroker/amf" >
<s:method name="getUserList" result="getHandler(event)"/>
<s:method name="saveUser" result="saveHandler(event)"/>
</s:RemoteObject>
发现了没?两者的差异不大吧,但是还有有一些区别的,因为dwr的话,方法是不需要配置的(当然你也可以配置),因为调用的方式是
someService.invoke(args,callback)式的,也就是说你在调用dwr的方法的时候就把回调函数写在后面就好了,而blazeDs中却不是这样的,它的方式是就像调用一个普通的一个对象的方法一样,那有人会问了,那处理之后的结果怎么办呢?呵呵,没看到我刚才贴的代码吗?在blazeDS中,定义RemoteObject的时候就需要对方法进行设置了,而那个result属性的值相当于dwr中的回调函数,现在明白了吗?总的来说还是很相似的.
最后说说类型转换的差异,无论是blazeDs还是dwr都是做了个语言桥梁的作用,既然是不同的语言,肯定就涉及到不同语言类型转换的问题(具体怎么转换可以参考官方文档),我这里就简单介绍下对象类型转换的问题,令人欣慰的是dwr和blazeds对于对象的处理是一样的(为什么欣慰呢,因为如果我要把原来用dwr+Ext技术的系统改成flex+blazeds的后台的代码就不需要修改了),一般来说他们都将对象转换为json格式(对于json不了解的可以把json想象成java中的map),到服务器端后再转成map,这么一来服务器端用Map来接收就好了.