构建面向对象的应用软件系统框架 第14章

 

第14章          智能客户端

软件从主机系统向C/S结构的转变,除了带来了系统资源的合理分配,也带来了客户端的新体验,尤其是图形界面系统的大量使用(主要是Windows操作系统),提供了高质量、响应迅速的用户体验,并且具有良好的开发人员和平台支持。但是C/S结构下的胖客户端,非常难于部署和维护。随着应用程序和客户端平台的复杂性不断增加,以可靠且安全的方式将应用程序部署到客户计算机的难度也将不断增加。如果部署了不兼容的共享组件或软件库,则一个应用程序可以很容易地破坏另一个应用程序,这种现象称为应用程序脆弱性。新版本的应用程序通常通过重新部署整个应用程序来提供,这可能使应用程序脆弱性问题变得更加严重。

为了解决这个问题,同时也伴随着Internet的高速发展,出现了基于WebB/S结构,客户端也就成了“瘦客户端”。这种结构,它解决了许多与应用程序部署和维护相关联的问题。瘦客户端应用程序是在中央 Web 服务器上部署和更新的,因此,它们消除了将应用程序的任何部分显式部署到客户计算机并加以管理的必要性。

然而,瘦客户端应用程序也具有一些缺点。首先一个缺点是瘦客户端应用程序的表现能力同胖客户端不能相比。虽然使用HTML能够做出非常漂亮的页面,使用JavaScript也能够在客户端进行一些处理,但是,JavaScript这样的脚本语言毕竟不能和编译语言的功能相比。从理论上来说,使用C++等编译型语言,你可以做出任何形式的客户端界面。使用瘦客户端,常用的应用程序功能(如拖放、撤消-重复以及上下文相关帮助等)可能不可用,这些都可能降低应用程序的可用性。

其次,使用基于Web的瘦客户端,就意味着必须总是具有网络连接,一旦网络故障,整个应用系统就不可用。并且因为应用程序的大部分逻辑和状态位于服务器上,所以瘦客户端会频繁地向服务器发回数据和处理请求。浏览器必须等待响应到达,然后用户才能继续使用该应用程序;因此,该应用程序的响应速度通常要比胖客户端应用程序慢得多。该问题在低带宽或高延迟的情况下被恶化了,并且产生的性能问题可能导致应用程序可用性和用户效率大幅度下降。要求输入大量数据以及/或者在多个窗口中频繁导航的应用程序尤其会受到这一问题的影响。

最后,由于基于Web的瘦客户端都使用HTTP协议,而HTTP协议是一个无状态的协议,因此,为了保留客户端的状态,必须使用一些特殊的技术,例如Session等。这样,会给服务器带来额外的负担,同时,程序员也不得不处理因Session过期而带来的种种问题。

随着Java.Net等新一代编程平台的出现和逐步成熟,并且由于这些编程语言和平台从一开始就考虑了网络应用,出现了智能客户端技术,分别以Java Web StrartMicrosoft Smart Client为代表。智能客户端应用程序可以将胖客户端应用程序的优点与瘦客户端应用程序的部署和可管理性优点结合起来。

智能客户端具有以下一些特点:

丰富的表现能力

智能客户端使用诸如JavaC#这样的语言来编写,能够充分利用编程语言的功能(当然前提是通过安全检查),最大限度地利用了代码和数据部署在客户端上并且在本地执行和访问这一事实。它为应用程序提供了内容丰富且响应迅速的用户界面,以及强大的客户端处理能力。例如,它可能使用户能够执行复杂的数据操作、可视化、搜索或排序操作。

智能客户端可以利用客户端硬件资源(如电话或条码读取器)以及其他软件和应用程序,可以最大限度地使用本地资源以及将本地资源集成到您的智能客户端应用程序,使应用程序更好、更有效地使用已经提供给您的硬件。这使它们非常适合于解决瘦客户端应用程序无法很好解决的问题,并且可以使用多文档界面,使用户可以更为有效地工作,并减少数据输入错误。此类解决方案还可以使您的应用程序更加紧密地与用户的工作环境集成(例如,通过采用自定义的或熟悉的用户界面),从而降低培训成本。使用客户计算机上的资源还可以减少服务器端资源要求。

可以通过智能客户端应用程序集成或协调其他客户端应用程序,以便提供一致且高效的总体解决方案。这些应用程序还应该了解正在使用应用程序的上下文,并且应该适应该上下文以尽可能地帮助用户;例如,通过根据用户的使用模式或角色抢先缓存适当且有用的数据。

零接触部署和动态加载

同瘦客户端一样,只能客户端可以只部署在服务器上面,当需要的时候,才从服务器上下载相应的模块,并动态加载进应用系统。当更新应用系统的时候,也只需要更新服务器,客户端会自动从服务器上下载最新的程序版本,这免去了胖客户端更新系统的麻烦。智能客户端应用程序可以在其运行时或位于后台时对自身进行自动更新。这一功能使其可以逐个角色地进行更新;以分阶段的方式更新,从而可以将应用程序推介给先导小组或受限的用户组;或者按照制定的时间表更新。

智能客户端可以部署在Web服务器上面,通过80端口来加载和更新程序,并同样使用80端口通过访问Web Service的方式来同服务器交互,这样,就可以解决防火墙的问题,保证系统的安全性。

离线客户端

智能客户端应用程序使用网络加载程序集,一旦加载之后,程序集便被缓存到了本地。当用户至少启动了一次应用程序后,程序集就被下载和缓存到本地内存中了,所以用户就可以离线运行的智能客户端程序了,并且只有在必要的时候才同服务器通信,调用服务器端的资源。

尽管网络已经成了大多数应用软件必不可少的环境,但我们仍不能给企业应用程序提供始终连续的连接。在某些情况下,我们还需要在断开网络的条件下工作,例如在某些情况侠使用手持终端工作的时候。离线式工作方式可以把数据先缓存再本地,然后,在你重新在线时,自动进行数据和应用程序的更新,这种特征是人们很想得到的,但在使用智能终端之前前,这是很难实现的。

同胖客户端一样,智能客户端给客户端分布大量的处理,这就为服务器免除了它在一个基于Web的应用程序中需要承担的负荷。智能客户端采取一种用户希望应用程序采取的工作方式——允许快速数据存取和管理,而不需要不必要的屏幕更新。

提供客户端设备灵活性

智能客户端还可以提供灵活且可自定义的客户端环境,从而使用户可以将应用程序配置为支持他或她喜欢的工作方式。智能客户端应用程序没有被限制到桌面计算机或膝上型计算机。随着小规模设备的连接性和能力的增加,愈发需要能够提供对多个设备上重要数据和服务的访问的有用客户端应用程序。

可以对智能客户端进行设计以使其适应宿主环境,并且为它们运行时所在的设备提供适当的功能。例如,适合在 Pocket PC 上运行的智能客户端应用程序应该提供相应的用户界面,该用户界面在较小的屏幕区域上被调整为使用笔针。

在许多情况下,您需要设计多个版本的智能客户端应用程序,每个版本都面向特定的设备类型,以便充分利用该设备所支持的特定功能。因为小规模设备通常在提供完整范围的智能客户端应用程序功能方面受到限制,所以它们可能只提供对功能完善的智能客户端应用程序所提供的数据和服务子集的移动访问,或者它们可用于在用户移动时收集和整合数据。最后,可以由功能更加完善的智能客户端应用程序或服务器端应用程序来分析或处理这些数据。

能够感知目标设备的功能和使用环境(无论它是桌面、膝上型、平板还是移动设备),以及能够定制应用程序以提供最适当的功能,这些都是许多智能客户端应用程序的基本特点。

两种类型的智能客户端方案

在考虑智能客户端和服务器的交互时,可以有两种类型的方法:以数据为中心的方法和面向服务的方法。使用以数据为中心的方法,客户端可以使用本地数据库和复制机制,以便在脱机模式下管理对数据的更改。使用面向服务的方法,客户端可以通过服务请求与许多服务进行交互。如果应用程序处于脱机模式,它可以推迟服务请求,直到重新连接至 Web 服务。每种方法都有其优点和缺点,且适用于不同类型的应用程序。下面的图显示了这两种方法的结构:

f01offline01

 

Microsoft Smart Client

微软通过Offline Application Block提供了智能客户端技术。Offline Application Block是一套在Microsoft.Net平台上进行智能客户端开发的类库,可以从微软的网站上下载。

 Offline Application Block 提供如下的将脱机模式功能构建到应用程序中的能力:

Ø         检测网络连接是否存在,这样可以使应用程序能够根据其联机或脱机状态来执行 

Ø         缓存必要的数据,这样即使在网络连接不可用时,应用程序也可以继续运行 

Ø         当网络连接可用时,将客户端应用程序的状态和/或数据与服务器同步化

它还可以利用其他块组件。例如,它可以使用 Caching Application Block 来利用缓存,并将 Caching Application Block 作为其参考数据缓存的基础。

因为 Offline Application Block 使用面向服务的方法,所以它所包含的功能(或类)与上图中所示的功能相对应。下面的图展示了 Offline Application Block 的相应子系统,它们是松散耦合的组件。

f01offline03

下面的表说明了图中显示的每个子系统。

子系统

说明

连接状态管理

“连接状态管理”检测应用程序是处于联机状态还是脱机状态。有两种方法可以判断连接状态:手动判断或通过自动过程判断。如果选择自动判断,则连接状态表示为包括网络层和应用程序连接的多层连接性(请注意,应用程序连接检测并不是在该应用程序块中实现的)。应用程序的行为会根据连接状态而变化。

服务代理管理

“服务代理管理”与 Offline Application Block 的这些元素(“消息数据管理”、“参考数据管理”)以及服务器进行交互。它会进行协调,以便将任务完成通知返回到应用程序。

参考数据管理

“参考数据管理”与“服务代理管理”和“消息数据管理”配合工作,以下载存储在本地计算机上的参考数据。在大多数情况下,参考数据是用于完成工作流的只读数据。“参考数据管理”可使参考数据与服务器上的数据保持一致。它将消息存储在“队列”中以下载参考数据。然后,“执行程序”将使用消息服务请求与服务连接,以下载参考数据。

消息数据管理

消息数据是在工作流过程中创建的数据。当应用程序处于脱机状态时,该数据将存储在一个本地队列中。当应用程序联机后,“执行程序”会从“队列”中删除消息,发出与服务器同步数据的“服务请求”,然后数据就会与服务器进行同步。

 

在安全性方面,Offline Application Block 并不提供安全架构。但是,它支持缓存和队列中存储的所有数据的加密和签名。加密和签名的使用不是强制性的,但强烈建议您使用。通过使用这些安全措施,应用程序可以在将数据临时存储在硬盘上时对数据进行保护。

 

 

 


 

小结

不管采用什么开发模式,什么框架来构建我们的界面系统,我们都必须明确,在界面层,主要的工作就是三个:一是界面的表现,二是页面迁移模式,三是同应用服务层的交互。合理的将这三个功能进行划分,以及有机的进行组合,是构建一个优秀的界面系统的基础。


posted on 2005-11-29 15:02  孙策  阅读(707)  评论(0编辑  收藏  举报