浏览 11839 次
锁定老帖子 主题:开发大型flash RIA系统经验之谈
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-06-10
最开始的时候,是使用的flash+xml的方式进行交互。这种方式 是目前常见的,不过过于低级。 开发小于50个表的系统时候 还可以忍受。但是 如果开发大型的系统。每次 数据交互的时候都要写对应的 加标签和解析标签的,写了xml2Table效果也不大好。太繁琐了。感觉开发完全成了体力劳动。 后来,开始了flash remoting和 axis web services的开发,终于让体力劳动结束了。不过 感觉 flash remoting的效率高一些[二进制数据]。在系统开放性和系统效率 之间我选择了系统效率。 还有一个原因是axis在jbuilder下发布很方便。但是eclipse下没有找到那么好的插件,手工部署。而我又对jbuilder不感冒。所以青睐remoting的简单。 在于客户端的数据交互的时候,最开始,remoting提供了一个RecordSet,DataGlue,可以通过此 绑定在 mm的各种控件上,这样做好像开发效率很高,也是mm推崇的方式。 但是开发时也遇到了问题: 1 mm的v2控件是十足的体积杀手[swf体积快速变大]。 2 本着mm提供的dataSet,需要 服务器端提供一个不占连接的 DataSet, 这个DataSet应该是类似asp.net提供的那些 DataTable,而且可以兼容xml格式的DataSet, 而jdbc中常见的只有一个不争气的resultSet,rowset也不尽人意。以前我就打算自己开发一个这样的dataset,但是在sun上说jdbc4.0马上就出来了。我就忍了。可是2年过去了还是没出来。 后来我的解决办法是: 1 我们team自己开发了一套控件来替代mm的控件。 2 自己写了DataTable,xml2Table,Xml2Object等DataSet类来交互。 这个时候,但是自己写的DataSet并没有 得到太大的应用。因为我们马上采用了hibernate。在客户端,我们也写了对应的POJO的 AS类。因此,客户端面对的是对象,不是Table,Array,Item这些东西了。在这种方式下,终于解决了困扰已久的问题,服务器端和客户端基本上都是完全的OO,整个一个C/S的开发方式。大型的程序 都可以系统地开发了。 我们的最终架构: flash: MVC (M: AS DAO ;V: UIObject;C[system logic]) java: remote inferface+ business logic+ ORM+DB 当然,因为速度上的考虑。有些地方没有像hibernate纯OO。还是用了比较脏的方式。当然项目开发就是这样。平衡胜于完美,可能以后会用ibatis吧。 再说一句,我对 Laszlo和flex一点都不看好,他让web开发又回到了jsp 时代.总体来说,struts,webwork不会马上应用到flash ria的。而且从longhorn的角度来说,以后没有c/s和b/s,只有c/s就是b/s了。 对RIA开发有兴趣的朋友看看我的blog http://blog.hexun.com/javafashion/viewarticle.aspx?articleid=423624 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-06-10
的确是很不错的尝试,赞一个!!
其实使用 Flash 开发 Web 应用一直缺少的是一个好的框架,拥有好的框架的后台技术大多数只支持 html ,wml, pdf 这几种视图层,而 Macromedia Flex 和 laszlo 这种生成 Swf 页面的技术本身就是一种错误的方向(不仅仅造成性能上的损失而且这种描述型的制作网页方式还缺乏直观性)。 XML , FLash remoting, Webservice 将来都会在 Flash RIA 开发中各占一席之地,所以我认为你完全抛弃 Flash + XML 的做法也不一定对,我自己在尝试一种包装 FLash 处理 XML 的方式,后台肯定是 Spring + Hibernate 了,但是前台肯定会做一些工作。 我认同你说的 V2 组件太过庞大,所以在 FLash 客户端可能要自己开发一些组件用于解析 XML 数据用于UI组件的显示使用,而且服务端也要做一些工作来做解析操作。 我一开始没打算采用 Flash Remoting 是因为Macromedia 好像对客户端Remoting 采取的是收费的策略(不知道现在怎么样了),而且Remoting 的开销可能也比 XML 要大。 当然如果要对 XML, REMOTING,WEBSERVICE 三个都做处理,后台还需要抽象出一个层来处理它们, 所以要做的工作还很多。 不过我都是自己的想法,毕竟我没机会做什么Flash RIA 项目,所以可能这些想法未必成熟。 等我把一个 Starter Project 做出来了再说吧。 |
|
返回顶楼 | |
发表时间:2005-06-10
我也同意两位的看法,我自己也不看好laszlo/Flex的技术方向,非但因为这种技术描述页面的不直观,更因为在XML里面引入了控制逻辑,把界面编程导向了复杂。
至于说到Flash Remoting,其实有各种开源的实现,Java的开源实现是OpenAMF,非常不错。 |
|
返回顶楼 | |
发表时间:2005-06-13
项目不是做做梦就实现得了的。
关于laszlo vs. jsp,jsp叫做紧耦合,laszlo叫做不耦合。正如你用mm产品实现的东西一样,这个是客户端。并没有去试图混淆服务器逻辑。跟不用说什么jdbc了。 struts我不知道,ww怎么不可以用在flash上了?就好像写wml一样嘛,最多你给出一个自定义的resultType。 比起实现复杂和推广难度。自己封装一套组件库,和直接使用laszlo用python实现的组件库,哪一个更简单? 写的代码。究竟是直接在.as中随处写一个创建某实例的动作,还是用xml包含这段代码并给出上下文的依赖关系(<class name="box".../> <box/><box/>..)。你可以说看个人喜好,但我觉得laszlo要严谨&不容易出错的多得多。 与其用上一堆的开源东西,openamf,sepy,mastc,...并且要有一个fla包含不用mmflash就无法看到其内容的,: "username._text,,,啊?username在哪儿?是个啥东西?_caption,_label还是_text,_title....",鬼知道你写的这个组件在创建的时候需要依赖些什么东西 我只用一个laszlo,把控制逻辑,通用类库,和具体应用分成若干lzx,你创建实例的时候少给了一个参数?不怕,dtd会告诉你的。你觉得需要扩展这个类实现简化功能?extends它,增加/覆写method,在给出文档描述。 我还是坚信java程序员会喜欢上laszlo的 回到正题,通信,用xmlhttp还是javarpc(amf),肯定是要依赖于具体情况的,一般来说post的动作javarpc好,get的动作xmlhttp好。非要说哪个更好吗? javarpc更适合没有用ww一层的应用,内容清晰易懂。但是flash会变得臃肿。 xmlhttp会在某些情况下变得很难处理,而且不易修改。 |
|
返回顶楼 | |
发表时间:2005-06-13
引用 写的代码。究竟是直接在.as中随处写一个创建某实例的动作,还是用xml包含这段代码并给出上下文的依赖关系(<class name="box".../> <box/><box/>..)。你可以说看个人喜好,但我觉得laszlo要严谨&不容易出错的多得多。
显然是as里面随便写一个实例动作来得简单,如果你在XML里面包含了控制逻辑,那几乎要不出错是不可能的。 |
|
返回顶楼 | |
发表时间:2005-06-13
robbin 写道 引用 写的代码。究竟是直接在.as中随处写一个创建某实例的动作,还是用xml包含这段代码并给出上下文的依赖关系(<class name="box".../> <box/><box/>..)。你可以说看个人喜好,但我觉得laszlo要严谨&不容易出错的多得多。
显然是as里面随便写一个实例动作来得简单,如果你在XML里面包含了控制逻辑,那几乎要不出错是不可能的。 不清楚控制逻辑指的是那些。 要我说laszlo编程是描述性的&事件机制的 是不是要写script,在什么地方写script,laszlo可以轻易的控制,laszlo针对的是整个应用,不是某个movieClip的某一个行为。 我举一个简单的可托拽的蓝色小方块的例子: <canvas> <view bgcolor="blue" width="20" height="20" onmousedown="this.setAttribute('mouseIsDown', true);" onmouseup=" this.setAttribute('mouseIsDown', false);"> <attribute name="mouseIsDown" value="false"/> <state apply="${parent.mouseIsDown}"> <attribute name="x" value="${parent.getMouse('x'); - 10}"/> <attribute name="y" value="${parent.getMouse('y'); - 10}"/> </state> </view> </canvas> 你可以把它改写成这样的东西: <canvas> <view bgcolor="blue" width="20" height="20"> <method event="onmousedown"> this.setAttribute("mouseIsDown", true);; </method> <method event="onmouseup"> this.setAttribute("mouseIsDown", false);; </method> <attribute name="mouseIsDown" value="false"/> <state apply="${parent.mouseIsDown}"> <attribute name="x" value="${parent.getMouse('x'); - 10}"/> <attribute name="y" value="${parent.getMouse('y'); - 10}"/> </state> </view> </canvas> 整个的应用都在这里,你用as怎么去做?是不是要让flash业者去画一个方块给一个名字,然后告诉我们在什么地方写一个叫什么名字的as就行了,方块叫什么,有效区域是在那里,dragger叫什么名字,如何获得鼠标…… 好了,这个做好了。那么,如果我想让我应用中的所有东西都有这样的托拽功能呢? laszlo我很轻易的把这个东西变成一个基类,让需要的东西去extends它,ok了。as如果没有去很好的设计的话又该是何等一番的工程? 好了,我又希望我drag的时候opacity为0.5,laszlo我只需要在这个state中多加一个<attribute name="opacity" value=".5"/>,ok了。as呢? 好了,我又希望这个透明度是可以创建的时候设定的,as?傻眼了吧?而我只需要改一个字,value="${parent.opacity}"。 我真想知道光是解决了交互问题就可以完成大型flash系统了?如何把它当作项目去维护呢?一堆作为附属品的as可以认为是项目吗? 要想推广flash应用的方法, 就不可以依靠现存的flash业者,必须让所有对象编程的人发挥自己的想象; 就不可以依靠单纯的as,人为的造成恐怖的入门门槛--无门槛--极度的灵活以至于不像是在做RIA; 就必须让人知道"我想要的东西在那里,我想象的功能如何实现",而不能回答他"这个功能flash本身没有的,你要自己写" 细细体味,其实oo在flash中只是一幅躯壳了 |
|
返回顶楼 | |
发表时间:2005-06-13
刚想谈到软件开发的思想上来了,恐怕要盗版老庄的言论。
忍不住……了 方便才是硬道理! 你都摒弃了java在客户端的应用了,太严谨,太灵活,带来什么?难写得要死!难维护得要死! 却来投奔这个真正的在这方面没有带来一点改善的根本不伦不类的as?为什么? 只能因为用flash得人多就业容易吗?“用的人多就意味着维护性强”,我很不赞成。到了成为消失个性的随便能找来的'工具'的时候,我也就谈不上职业规划了,甚至无法找到工作了。 为什么不在易用性上做文章?为什么不让一个白痴都能看懂你在写什么?为什么不让一个白痴都能玩转flash? 在痛苦的半年SWT编程之后我坚定的选择了laszlo,灵活性和易用性恰到好处,面向RIA,面向java程序员 做laszlo应用也有半年了,至今还时不时感叹他的恰到好处 我能想到的最完美的as实现,那肯定是没有fla的,但想象不出它的存在形式除了java类一般的as类还能是什么。我想阐释一下为什么这样做as更加不伦不类: 老庄的"oo已逝"的言论换来那么多不理解,oo只是给我们呈现这个世界最直白最惨淡的描述,而并非最贴切的 我不知道应该是什么o java程序员不会不知道Object都有些什么方法吧,wait(),clone(),notify(),哈,java成为不折不扣的oo语言 flash里边没有线程,但到处都是线程,我有一个属性叫做opacity,自然就会有一个事件叫做onOpacity(),我有一个属性叫做x,自然会有事件onX() 这使得Flash的表现形式不再是oo的, 另外两个东西使得这个它更明显:Delegate和State。 描述了他们什么时候发生,依赖于什么条件。 ok,java也有这样的模式,而且是客户端编程必备的模式。但不同的是flash的本身就是这样而非需要想到去用什么模式 最贴近需求的编程方式就是把他们逐一个的描述出来! laszlo这样的xul就是完全的描述性质的! |
|
返回顶楼 | |
发表时间:2005-06-13
b051 写道 比起实现复杂和推广难度。自己封装一套组件库,和直接使用laszlo用python实现的组件库,哪一个更简单? 与其用上一堆的开源东西,openamf,sepy,mastc,...并且要有一个fla包含不用mmflash就无法看到其内容的, 我们做RIA以前是用的js。做的东西类似于http://www.bstek.com/ 现在用laszlo和flex实现的。javascript都可以实现。网上有不少这样的例子。 如果你开发一些游戏性的效果。或者一些 网络系统中的 工作流节点配置的。或者一个可视化的产品效果。 只能用flash来开发。总的来说,laszlo的难度 不会比struts更难。 而由于flash语言的不规范性和可以生成代码的GUI 工具的缺乏, flash纯代码开发GUI和其他交互性效果的难度超过了swing和swt。 没有一个技术是绝对的好,需要根据 项目要求来。我们采用flash达到了自己需要的效果。但是在项目进展和人员招聘上不尽如人意。如果没有那么复杂的 界面要求,laszlo和flex也是不错的选择。因为对于中国web开发者来说,熟悉asp,php/jsp的人 还是比 会swing/swt的人多很多。而且你也不用希望这些人能够理解观察者,合成,享元,控制器,过滤器这些GUI中用到的设计模式。如果要短,平,快的开发,laszlo,flex是不错的选择。就像中国现在80%的网站都是asp和php的。 mm自己的网站上也说了flex和flash之间的关系。flex和flash不是替代关系。只是实现一些简单的flash效果。 |
|
返回顶楼 | |
发表时间:2005-06-13
我想我们谈的还是RIA或者说现代应用程序的开发方式的问题,已经不局限于Flash。
btw,laszlo可以足够轻易的移植到别的平台,当然现在他还没有实现。RoadMap上这么写的: 引用 Alternative runtimes
The OpenLaszlo platform is designed to be independent of the Flash execution environment. Client runtimes under active consideration are the JVM virtual machine and the .NET CLR. Laszlo的语义来说,不适合做一种东西:可以随意创建不定数目对象的应用。 但例如设置工作流程这样的事情不是不能做。mylaszlo上这样的例子多了去了。 网游嘛……你觉得这样比合适吗? 但是写起来绝对不会比as的实现多一句话! 再有就是,javafashion的观点到底是什么?laszlo因为能做快速开发所以不看好? |
|
返回顶楼 | |
发表时间:2005-07-05
犀利~.还是挺看好laszlo的,期待它的下个版本的svg输出.
|
|
返回顶楼 | |