Rich Client Fashion

    JDK1.5和C# 2.0没有让人兴奋,即使再加上EJB3.0和WebForm 2.0,都没有Rich Client的大潮让人对明年抱有期待。
    Rich Client的Fashion里,XAML和XUL是基于特定浏览器的实现, flexLaszlo是基于Flash的实现,Spring和Eclipse也各有自己的一套。不过, XAML还处在单细胞状态,而且基于.Net; XUL就需要客户安装FireFox,而且似乎规模偏小,发展的空间不大。Flex版权太贵而且目前还太多Bug;而Laszlo出身不够高贵且小命掐在MM手里。Eclipse和Spring的rich client还没有试用但估计占有市场不易。
     可见2004年末一切都各有缺点还是乱势,因此只当没事发生继续等待不是什么罪过,现在项目中强行使用只会代价巨大,而且容易选型失误。
     但还是,忍不住热了一下身,同事试用Flex的时候,经常过去插上两脚。最后同事的小项目做完,自己也了解了Rich Client的实际东西,发现预热一下自己还是很重要的,明年的RIA潮流趋势、升级资讯一定会雪片般飞来,实践过的,就能实际的分析这些资讯,懂得其中的厉害。没有动手做过的就只能浑浑噩噩的人云亦云,或者自己袖手空谈了。

Rich Client的三个代表

     综合XUL和Flex,Laszlo,一个Rich Client的方案,一定要提供下面三样东西:
     1. 表现层的控件。
        不能再依靠Html的<Table>,<Div>慢慢画控件了,如C/S程序般直接提供应用的控件标记。
 
     2. 消息处理机制
         同样W3c DOM的消息机制是用于Web Site上的,应用必须有和C/S程序差不多的消息机制,虽然和W3c的可能差异不算很大。
 
     3. 与后台交互的能力
         form submit页面刷新的交互方式被千百人怒骂,所有做过Desktop开发的同志都觉得怎么B/S下交互这么麻烦。
         而Flex很有代表性的提供了三种交互方法:
         第一种是Web Service,最标准同样也是最麻烦,最增加开发工作量的方法。
 
         第二种是Http Request,类似xmlhttp,与第一种一样是面向过程的,前后台之间传输的经常是XML格式的数据,需要与对象相互转换。好处是额外的工作量比WS少,前台直接请求后台的.do即可,可以在Rich Client和普通Web Browser方案之间切换。
 
         第三种是Remote Object,这是最OO,最贴近C/S开发模式的方法,缺点是在服务器端用的是MM自己的AMF,所以要与Spring框架或者EJB打交道,就需要一个Proxy类来JNDI lookup(EJB) 或者BeanFactory.load()(Spring)。   

RIA相关技术介绍

Java:一些相当复杂的客户端应用程序(Oracle的JDeveloper,Eclipse)都是用Java编写的,这说明可以用Java来建立几乎任何一个能够想象得到的富客户端应用程序。到目前为止,Java已经出现几年了,并且完全支持创建基于窗体的用户界面。除了Java基础类(JFC/Swing)中的用户界面组件之外,开发人员还可以使用来自于Eclipse Project的SWT工具箱和许多第三方工具箱进行开发。对于图形来说,可以采用Java 2D API--一个非常完整且非常复杂的图形API。Java还具有对XML和Web服务无人匹敌的支持能力。你可以通过一个Web浏览器使用Java插件软件,或使用Java运行时环境中较新的Java Web Start技术来部署应用程序。使用Java建立富客户端程序的主要缺陷是它的复杂性(即使对简单的窗体和图形也要求编写非常烦琐的代码)。它的优点在于Java对Web标准的全面支持,及该语言和类库的深刻内涵。 

XUL:XUL(念作"zool")是一个基于XML的用户界面语言,它来自于Mozilla的开放源码项目。它可用于建立窗体应用程序,这些应用程序不但可以在Mozilla浏览器上运行,而且也可以运行在其他描述引擎上,如Zulu(一个Flash MX组件)和Thinleys(一个Java实现)。XUL描述引擎都非常小(100K以下),它可以使用XML数据也可以生成XML数据。同Java的情况一样,XUL也有一个非常大的用户团体,这个团体有大量的开放源工具,如Theodore ThinletEditor(见“下一步”)——一个使你能够以图形化方式布局用户界面,且可以生成相应XUL的Java应用程序。XUL的一个主要缺点在于它目前还没有获得一个主要商业实体的支持。XUL最大的优点在于它与Gecko引擎的集成(打开了通向大量Web标准的大门),以及与大多数其他XML用户界面描述语言相比它是一种非常具有表达力和简洁的语言。 

Macromedia Flash和Flex:Flash是一个已经成熟的商业产品,它可以在Web网页中引入交互式的图形界面。最近经过升级后,新版本包含了建立窗体风格的应用程序的功能。尽管Flash作为一个在Web上最广泛部署的前端技术还有争议(取决于所选用的Flash Player版本),但据称已经有98%以上的桌面系统都支持Falsh。由于用来创建动画式图形的Flash工具其功能十分强大和是可视化的(与之相反其它技术要求进行低级的图形编码),所以图形设计人员使用起来十分得心应手。Flah采用的脚本语言是ActionScript--ECMAScript 1.5的一个变种,该脚本语言又被称为JavaScript。Flex产品对Flash增加了一个XML描述语言,使得可以编译用户界面,并且能够用Flash Player来随时进行描述。Flex使得传统的开发机构能更好地了解和使用Flash。Flex和Flash的最大缺点在于对XML和Web服务等标准的支持很有限,而且作为应用开发工具的环境还不大成熟。Flex和Flash的优点在于它可以很容易的用来创建复杂的动画式显示,以及可以使用第三方附件。

Oracle Forms:Oracle Forms是用来构建以数据库为中心的互联网应用系统的一个成熟的商品化产品。通过Oracle Forms,你可以使用一个输出窗体模块文件的可视化设计器创建窗体。为了便于在该设计工具外部进一步进行处理,模块文件要么采用私有的FMT格式,要么采用XML格式。这些模块文件驱动一个描述窗体的Java运行时环境。除了所有窗体的标准窗口小部件之外,还可以通过集成附加的可插入的Java组件和一些定制的JavaBean来实现更多的功能性。Oracle Forms采用的脚本语言为PL/SQL,Oracle数据库也采用同样的脚本语言。Oracle Forms的一个非常有趣的特点就是,用来建立、编辑和编译窗体模块文件的Java API--开发人员可以通过创建脚本来生成众多的窗体应用程序,或者进行全局性的改动。Oracle Forms的主要缺点是,进行Web部署需要获得Oracle应用服务器的使用许可。它的优点是,它可以与Oracle数据库和Oracle平台的其他部分(如Single Sign-On(单一登录)和Enterprise Manager(企业管理器))紧密集成,对国际化的广泛支持,以及创建以数据为中心应用程序的极高效率。 


XAML:基于Longhorn的用户界面标记语言,XAML通过XML的语法,使用微软新的基于矢量的图形库(vector-based drawing library)Avalon。

Flex的最好参考资料      

       A. 入门文档:国内的文章比较难找,都是一些基础的应用。论坛与QQ群也是少有人回复。所以建议直接从MM的官方网站上下载参考手册:
           http://www.macromedia.com/support/documentation/en/flex/
 
       B. 提高文档:依然只有MM开发者网站上的东西值得学习:
            http://www.macromedia.com/devnet/flex/
            同事语,看完 Best Practices  ,对Flex有了新的认识,里面的Sample都是很好。
            同时 Christophe Coenraets 和 Matt Chotin的blog也应该经常阅读