技术开发 频道

RIA的未来:Direct RIA

  【IT168 技术分析】尽管企业可以从RIA受益,但采用新技术总是有一定风险,首要的问题是如何选择正确的解决方案,因为有太多的选择,没有一个清晰的评判标准,需求也非常复杂,很难做出正确的抉择。

  要生产力还是要可控性?

  RIA通常被分为两种类型:以客户端为中心的RIA和以服务器为中心的RIA。以客户端为中心的架构就象手动挡汽车一样,具有更多的控制,而以服务器为中心的框架就象自动挡汽车一样,开起来很容易,因此它可以提高开发人员的生产力。对于开发人员而言,采用以服务器为中心的架构时,Ajax技术对于他们是完全透明的。那么究竟应该选择哪种类型呢?这的确是个头痛的问题!是要生产力还是要可控性?是否可以同时享受两类架构的优点?现在终于有了答案,那就是Direct RIA。

  Direct RIA=客户端+服务器的融合方法

  Direct RIA开启了一个革命性的方法,它融合了客户端+服务器架构,同时平衡了生产力和可控性,编程时需要完整的定制和更多的响应。

  Direct RIA架构概览

  Direct RIA是一个以服务器为中心加上可选的客户端编程的解决方案,如果你仔细分析下面的插图,你会发现以服务器为中心的编程模型允许开发人员使用纯服务端代码构建Web应用程序,服务端引擎会自动生成需要的HTML和JavaScript代码,客户端引擎与DOM树交互刷新内容。此外,浏览器和服务端是通过客户端和服务端的Ajax引擎自动同步的,因此开发人员可以集中精力实现应用程序逻辑,不用将过多的精力放在复杂的Ajax技术上。

  图 1 Direct RIA架构

  但纯以服务器为中心的编程模型有一个缺点是开发人员不能完全控制用户界面的表现形式,为了克服这个问题,Direct RIA开启了一个可选的客户端编程模型,允许开发人员编写客户端代码直接控制用户界面。

  Direct RIA编程模型

  Direct RIA编程模型包括Direct UI访问,Direct数据访问,Direct实时数据和Direct客户端控制。

  Direct UI访问

  由于应用程序运行在服务器端,应用程序可以直接访问窗口小部件(widget),我们用ZK(http://www.zkoss.org/)举一个例子,我们在服务器上创建一个Java 二维对象,只需要将这个对象放到窗口小部件中,用户就可以直接在他们的浏览器中看到这个图形。

1 <image id="image">
2 <button onClick='draw(10,10,10,10)'/>
3   <zscript>
4   void draw(int x1, int y1, int x2, int y2) {
5   LiveImage li = new LiveImage(400, 300, LiveImage.TYPE_INT_RGB);
6   Graphics2D g2d = li.createGraphics();
7   Line2D line = new Line2D.Double(x1, y1, x2, y2);
8   g2d.draw(line);
9   image.setContent(Images.encode("test.png", li));
10 }
11 </zscript>

  使用Direct RIA后,开发人员不用再为客户端编程而烦恼了,换句话说,即使不学习任何客户端编程,也可以快速开始一个项目。客户端编程工作量急剧减少。

  Direct数据访问

  此外,应用程序可以很容易访问服务器端资源,包括数据库和Web Service,因为它们前端和后端都运行在服务器上,下面显示了一个简单的从数据库获得数据的示例,使用ZK框架将数据显示给用户,当用户点击按钮后,就会显示一条欢迎消息。

1 Hi. <label id="name"/>
2 <button>
3   <attribute name="onClick">
4   User usr = Database.getUserById(1);
5           name.setValue(usr.getName());
6   </attribute>
7 </button>

  创建Web应用程序的最大挑战之一是异步编程模型,它包括从服务器获取数据,更新DOM树的各种步骤,但在Direct RIA中,前端和后端是无缝集成的。异步通信变少了。

  Direct实时数据

  使用Direct实时数据,开发人员可以将数据从视图中分离出来,通过ZK框架开启ListModel接口,开发人员只需要提供数据,不用再亲自处理网格了。

1 <zscript>
2     String[] data = new String[1000];
3     for(int j=0; j < data.length; ++j) {
4         data[j] = "option "+j;
5     }
6     ListModel strset = new SimpleListModel(data);
7 </zscript>
8 <grid width="100px" height="100px" model="${strset}">
9     <columns>
10         <column label="options"/>
11     </columns>
12 </grid>

  网格将数据发给客户端,如果数据较大,可以节省很多网络通信。可伸缩性问题更少了。

  Direct客户端控制

  使用Direct客户端控制,开发人员可以使用JavaScript或标记语言创建窗口小部件,在客户端实现部分功能,提高响应能力。在下面的例子中,我们展示了一个例子,如何利用ZK的标记语言,采用纯客户端编程实现一个简单的功能显示用户的输入。

1 <page id="main">
2 <textbox id="searchBox"/>
3 <label id="value">
4 </page>
5
6 <script>
7 zk.zuml.Parser.createAt('#main', null, null, function (page) {
8     page.$f('searchBox').listen({onChanging: function (event) {
9         page.$f('value').setValue(event.data.value);
10     }});
11 </scrpit>

  开发人员可以自由定制客户端功能以满足他们的各种需求。个性化问题更少了。

  RIA的未来是Direct RIA

  构建企业级应用程序从来不是一件容易的事情,更别提同时要将用户界面做好看。此外,选择一个正确的解决方案满足各种需求并不容易,Direct RIA提供了一个客户端+服务器的融合方法,开发人员使用Direct RIA编程模型可以提高生产力,而且可以直接访问前端和后端,如果需要,开发人员还可以自己对客户端进行编程,定制需要的个性化功能。Direct RIA给开发人员提供了一个整体解决方案,既可以提高他们的生产力,又可以有效地控制。

  关于作者

  Robbie Cheng是ZK框架的传教士,他是ZK Mobile for Android和ZK论坛的主要开发者,他是《ZK:无JavaScript框架Ajax》一书的合著者,在AjaxWorld杂志,TheServerSide和Javalobby发表了大量的文章,他也积极参与了各种活动,如谷歌开发者日(Google Developer Day),移动星期一(Mobile Monday)和OSDC 2009。

  原文出处:http://www.codeguru.com/java/article.php/c16445

0
相关文章