这里所提及的Flash技术,包括Adobe的Flash Player以及AIR。基于Flash的软件开发,涉及的人比较少——更多的人或许认为Flash更适合做在线产品,比如Media Player、Data Show等等。其实做软件开发也是一样,只要Flash适合你的产品,为何不抛开传统的开发理念而采用Flash呢?
本文根据自己开发维护DoSWF(详细信息请查看:http://www.doswf.org)的经验,对基于Flash的软件开发,做一个全面的解剖。
和传统的软件开发技术不一样的是,相对来说Flash能做的实在是太少了。Flash从一开始就依附于浏览器,就注定它要在安全方面如履薄冰。从最简单的Actionscript 1.0,到Actionscript 2.0,再到目前相对比较强大的Actionscript 3.0,虽然说目前用Flash我们能做越来越多的事了,但因为安全问题,Flash仍然有很多事不能做。就算是Adobe后来推出的AIR技术,也无法完全跨越安全的限制。
所以在你确定要使用Flash技术进行软件开发前,你必须要知道Flash什么不能做,什么能做。这样你才能知道Flash技术是否适合在你的产品上使用。比如你要开发一个杀毒软件,Flash能做吗?显然不能。但是如果你要开发一个RSS订阅器,这个完全则可以实现。所以,如果有必要,请事先咨询一些Flash开发人员,他们更清楚Flash的优势和劣势,更清楚你的产品是否适合使用Flash技术。
既然我们使用Flash来开发我们的软件,那么我们在架构产品时就应该更多的让Flash来发挥它的优势:跨平台性,以及Online Application和Client完美结合。这里看一下DoSWF设计初的产品架构:
产品分三条主线分发:
不难看出,基于Flash的软件开发,在跨平台上的分发上,比传统的软件开发方式就存在很大优势。更特别的是借助于浏览器,以及Flash Player的高安装率,可以通过发布在线版本(如果功能上可以的话,比如你的软件是一个聊天软件),让你的产品更快更便捷地呈现给用户,服务于用户。
Adobe Flash系列产品,包括Flash IDE, Flex, Flex Builder, Flash Player, AIR。借助于这些优秀的软件,你可以很方便很快捷地进行功能开发。
很多时候你的软件要发布成不同的版本,比如一个用于在线发布,一个用于打包成exe发布,而另一个用于发布成AIR程序。每个版本所对应的接口是完全不一样的。你不可能每个版本都开发一次吧? 抑或是将软件模型提取出来,接口调用再各写一份?这样能解决问题,但是在后期的版本维护中,你会发现版本非常混乱。
最好的解决方案就是使用环境编译(详细信息请查看官方帮助)。它容许你在编译时有条件的选择相应的代码编译。比如:
Flash生来就是做UI的,这是C、Java等传统软件开发模式所不能比拟的。特别是借助于Flex Framework,里面内置了很丰富的组件,使开发人员完全可以从UI处理中脱离出来,进而更关注软件的核心实现。通过Flex Framework,可以很方便的完成换肤以及多语言支持。
在我看来,开发Web游戏,或在线应用,是否使用Flex Framework确实需要很好的斟酌一下。但是如果是进行软件开发,完全可以尝试一下——你不需要考虑它的体积(几百KB而已),也不需要考虑它的效率(比起你程序核心的消耗,它将会是很低的)。当然了,如果你的程序有发布在线版本的计划,如果在浏览器中运行效果不是很尽如人意,可以考虑将在线版本发布成一个Demo版本。
这个是软件开发必须面对的一个问题。Adobe AIR目前的版本已经集成了自动升级模块。如果你的程序发布成AIR版本的话,可以很方便地完成自动升级的开发。但是发布成另外的版本,比如Windows的exe版本,就得自己去架构自动升级模块了。需要说明的是,最好是复用AIR升级模块的xml文件格式,不然维护这个升级文件会很复杂。
这个是所有商业软件需要面对的一个问题。最最基本的模式就是出售授权来获取商业利益;如果再高级一点,就是提供商业性质的服务——比如顾问、软件定制等等。这些都不是重点,而且我确实没有深入研究。但是当你的软件发展到一定阶段的时候,我个人认为有一个东西就应该考虑了:产品系列化。
像DoSWF,之前只有一个Professional版本,慢慢我发现很多人只用里面最最核心的几个功能,其他功能他们根本用不着,而且也不知道怎么用——并不是每个人都很熟悉你软件所涉及的领域。于是后来我把DoSWF里面最核心的功能提取出来,发布了DoSWF MINI版本,这样用户完全从DoSWF Professional“混乱”的功能中脱离出来,而且费用更低。再到后来,我发现DoSWF不能满足用户针对项目的需求,于是又有了FPE(Flash Project Encrypter)。这就是产品的系列化。
在软件一开始你可能会对整个产品用户有一个很准确地把控。但是实践会告诉你,你的用户远远超出你的想象。所以,产品的系列化是产品发展中一个很重要的环节,同时也意味着你要去做数据统计、分析,然后重新审视你的用户群体。这些就不只是针对基于Flash软件开发而言了。补充一点,如果你的程序发布成AIR版本后,可以将软件发布到Adobe的AIR Market。
做软件即做产品,是一个很深很广的领域,这里只是对基于Flash的软件开发做一个抛砖引玉。很多产品,换一种思维,换一种方式,突破传统的束缚,你会有一个更新更广的天地。
作者简介:陈了然,网名laan,2004年接触Flash,入门较晚,倍感压力。08年开始研究Flash加密与混淆,并自主开发一款Flash加密软件。曾就职于sina事业产品部,以及sohu研发中心。现就职在百度Flash开发组。个人技术博客:http://www.laaan.cn/。
本文已被收录在《架构师》(5月刊)。