技术开发 频道

网络开发即将进入RIA+SOA的时代

4. 提供集成的服务平台(Integrated Services Platform)

  RIA只是构建富应用程序的一部分。我们仍需要完成RIA+SOA中的SOA部分。不幸的是,当前的Web 2.0工具包和框架主要用于RIA,很少甚至不提供对构建服务的支持。这确实是个问题,因为这样又需要开发人员来完成大量的工作,使得应用开发和维护需要耗费更多的时间并变得异常困难。 

  下一代RIA+SOA平台要解决这个问题必需提供一个能满足以下条件的集成的服务平台:

  • 支持使用任何语言创建服务
  • 实现RIA与SOA层的无缝交互
  • 可以使用本地模拟服务(mock service)

  过去,网络框架使用单一的编程语言构建,但是在RIA+SOA时代,这种做法将变得过时并且多余。RIA程序只与服务交换应用数据,它们应该是独立于编程语言的。RIA程序与SOA服务只需要一个简单的消息关系。RIA与SOA层之间的松耦合特性为集成的服务平台提供了方法,可以使开发人员使用任何编程语言创建服务并不会影响到RIA层。 

  集成的服务平台同样应该提供RIA与SOA各层之间的无缝交互。特别是,它应该代替开发人员处理服务路由选择和数据转换。下面是一个用简单的集成方法创建服务的示例。这个示例是用Java编写的。

@Service (request = ‘login.request’, response =’login.response’)
protected void loginRequest (Message req, Message resp)
     throws Exception
{
     String username = req.getData().getString(“username”);
     String password = req.getData().getString(“password”);
     User user = UserDAO.login(username,password);
     if (user !=null)
     {
          response.getData().put(“success”,true);
          response.getData().put(“user”,user);
          return;
     }
     response.getData().put(“success”,false);
}

  在上面的示例中,有两点需要注意:首先,通过在Java方法中加入一个简单的“Service”注释便让一个平常的Java对象变成了一个服务。注释中包含了这个方法所处理的服务请求和服务响应消息,使路由设置变得简单。其次,可以简单明了地处理请求和响应数据。在这个示例中,将整个User对象放入响应消息中。服务平台负责处理数据转换。这样开发人员可以集中精力编写服务逻辑而不是胶合代码(glue code),可以减少代码量并提高开发速度。

  然后,如果RIA与服务之间的关系是基于消息的,就可以创建本地模拟服务。本地模拟服务可以响应远程请求,但它们只存在于本地RIA中。这是一种很强大的功能,因为无需一行服务代码便可创建功能齐全的RIA模型。可以将这些本地模拟服务放在单个文件中,并在用户界面开发完成后删除。我们来看一个例子:

<!-- Progress indicator -->
<img src=”images/indicator.gif” style=”display:none
  on=”r:login.request then show or r:login.response then hide”/>
<!-- Login form -->
Username: <input type=text” fieldset=”login” id=”username”/>
Password: <input type=”password” fieldset=”login” id=”password”/>
<input type=”button” value=”Login”
  on=”click then r:login.request”/>

登录表单

<app:script on=”r:login.request then execute after 1s”>
     $MQ(‘r:login.response’,{‘success’:true,’username’:’foo’});
</app:script>

模拟服务

  在上面的示例中,我们有一个产生服务请求r:login.request的登录表单。我们还有一张图像,它将在收到r:login.request消息时显示,并在收到r:login.response消息后隐藏。第二部分是一个模拟服务的示例。这个模拟服务监听r:login.request服务请求,并在一秒后用r:login.response消息响应(当然这一秒只是模拟服务延迟)。登录表单并不知道服务的位置,它只负责响应消息。这个简单的示例显示了如何不靠一行服务代码创建一个完整的RIA模型。这种模型是100%可重用的,并使开发人员可以在服务创建之前定义服务合约。这样,服务创建工作得到了很大程度的简化,因为开发人员不仅有一个功能齐全的模型作为参考,还同时得到了一个完整的服务界面。

总结

  开发人员目前正在经历网络应用开发的巨大转变。我们正从Web 1.0的基于服务器的MVC模式转为面向网络的客户机/服务器架构,或者更准确一点应该称为RIA+SOA。由于这个转变,开发人员要将他们所用的网络开发平台集成到一起才能进行富网络应用的开发。当然,转变的同时也会带来机会。这个机会便是建立下一代为Web 2.0应用提供端对端支持的网络平台。

    在Appcelerator,我们看到公司在一年以前已经接受这种转变。他们正在开发Appcelerator Platform,这是一个支持RIA+SOA的全新平台。本文所用的示例正是基于这一平台。当然,创建下一代网络平台有许多不同的方法。但是,即使实现细节上有些许不同,大体特征应该都是一样的。

0
相关文章