第 4 章 — 偶尔连接的智能客户端
我们生活在一个连接程度越来越高的世界里。然而,在许多情况下,我们不能无时无刻都依赖连接。您的用户可能需要旅行,他们可能会暂时失去无线连接,可能存在延迟或带宽问题,或者您可能需要拆卸网络的某些部分进行维护。即使用户的确具有良好的网络连接,您的应用程序也可能无法在所有时间都能访问网络资源。所请求的服务可能繁忙、停止运行或者只是暂时不可用。
如果应用程序有时无法及时地通过网络与服务或数据交互,则为偶尔 连接的应用程序。如果您能让用户在脱机时使用其应用程序富有成效地工作,并且仍然能够为其提供连接的应用程序在连接有效时所具有的好处,则可以提高用户的生产率和工作效率,并且提高应用程序的可用性。
智能客户端相对于基于 Web 的应用程序所具有的主要好处之一是:当应用程序无法连接到网络资源时,它们能够让用户继续工作。偶尔连接的智能客户端能够在未连接到网络资源时工作,然后在以后某个时间在后台更新网络资源。更新可能几乎立即发生,但有时可能发生在数天甚至数周以后。
要给予应用程序完整的偶尔连接功能,您需要提供一种基础结构,使用户能够在没有连接到网络资源时工作。该基础结构应该包括数据缓存,以便可以在客户端使用所有需要的数据;它还应该包括用户工作详细信息的存储,以便用来在用户重新联机时将客户端与网络资源同步。应用程序为支持偶尔连接的操作所需要的确切特性和功能取决于它的连接性、操作环境以及用户在联机和脱机时所期望的功能。但是,所有智能客户端应用程序都应该在未连接到网络时为用户提供某种体验,即使功能极其有限。在设计和生成应用程序时,应该始终避免因为服务器不可用而在客户端生成错误消息。
本章考察您在生成具有脱机功能的应用程序时所面临的问题。它将讨论设计脱机应用程序的不同策略,详细讨论设计注意事项,分析如何组织应用程序以使用任务,并且考察应用程序应该如何处理数据。
常见的偶尔连接情况
偶尔连接的智能客户端在许多常见的情况下都极其有用。许多脱机情况涉及到用户显式断开网络连接并且在没有网络连接的情况下工作,例如:
? 保险代理可能需要在离开办公室的时候创建新的保险单。他或她可能需要在无法连接到办公室中系统的情况下,输入所有相关数据,计算保险费,并签发保险单详细信息。
? 销售代表可能需要在现场(该销售代表无法在此处连接到服务器)与客户签订大订单。他或她可能需要咨询价格表和目录信息,输入所有订单数据,并提供交货预算和折扣级别,而无须连接。
? 维护技术人员在客户端站点处理服务呼叫时可能需要详细的技术信息。应用程序帮助他或她诊断问题,提供技术文档资料和详细信息,并且使该技术人员无须连接就能签下部件订单以及记录他或她的操作。
其他脱机情况涉及到间歇性或低质量的连接,例如:
? 遍布全球的客户呼叫中心和企业网络之间的连接可能不具有足够高的质量,以供全天候联机使用。应用程序应该提供脱机功能(包括数据缓存),以便维持应用程序的可用性。
? 携带 Tablet PC 旅行的医务人员可能在旅行途中经历网络连接中断的情况。当应用程序连接时,它应该在后台同步数据,而不应该等待显式重新连接。
应该将偶尔连接的智能客户端设计为最大限度地利用可用连接,确保应用程序和数据尽可能保持最新,并且不会对应用程序的性能造成不利影响。
偶尔连接设计策略
在设计偶尔连接的智能客户端应用程序的体系结构时,有两种概括性的方法:以数据为中心 和面向服务。
使用以数据为中心的策略的应用程序具有一个在客户端上本地安装的关系数据库管理系统 (RDBMS),并且使用该数据库系统的内置功能将本地数据更改传回服务器,处理同步过程,并检测和解决任何数据冲突。
使用面向服务方法的应用程序将信息存储在消息中,并且当客户端脱机时将这些消息排列到队列中。在重新建立连接以后,排队的消息将被发送到服务器进行处理。
以数据为中心的方法
当您使用以数据为中心的方法时,通常情况下,服务器发布数据,而客户端创建它所需要的数据的预订,以便它可以在脱机之前将相应的数据复制到本地数据存储。当客户端脱机时,它将通过对本地数据存储的调用来对本地数据进行更改。当客户端重新联机后,数据存储会将对客户端上的数据所做的更改传回服务器。对服务器上数据所做的更改也可能被传回客户端。在合并阶段遇到的任何冲突都将按照业务分析师定义的自定义规则,由在服务器或客户端上指定的冲突解决规则处理。
在客户端和服务器之间合并更改的过程称为合并复制。更改可能在客户端和服务器以自治方式发生,因此不使用 ACID(原子、一致、独立、持久)事务。相反,当执行合并时,系统中的所有预订者都将使用发布者拥有的数据值。
以数据为中心的方法主要优点是所有更改跟踪代码都包含在关系数据库中。通常,这包括数据库的列级和行级的冲突检测代码、数据验证代码以及约束。这意味着您无须编写自己的更改跟踪代码或冲突检测与解决代码,尽管您的确需要知道合并-复制方案以便针对数据冲突和数据更新来优化您的应用程序。
在以数据为中心的模型中,数据库系统负责处理同步;因此,您无须自己来实现所有数据同步功能。用户定义哪些表要求数据同步,而数据库系统使基础结构可以跟踪更改并且检测和解决冲突。您可以通过使用
COM 对象或 Transact SQL (TSQL) 存储过程的自定义冲突解决程序来扩展该基础结构,以便提供自定义冲突解决或避免机制。而且,因为在整个系统中只有一个数据储存库,所以当同步完成时,能够保证在服务器和客户端之间执行数据会聚。
面向服务的方法
对于面向服务的方法而言,客户端可以与需要的任何服务交互。而且,客户端将致力于服务请求本身,而不是对本地保存的数据进行直接更改。服务请求可能在客户端或服务器上导致状态更改,但此类更改是服务请求的副产品。
面向服务策略的一个优点是在客户端上不需要本地关系数据库。这意味着可以将该方法应用于许多不同的客户端类型,包括那些具有少量处理能力的客户端,如移动电话。
当您的应用程序必须在 Internet 和 Extranet 环境中工作时,面向服务的方法尤其适合。如果您的客户端在防火墙外部工作并且与企业服务交互,则通过使用面向服务的策略,您可以避免由于某种原因而必须在防火墙中打开特定的端口,例如为了启用直接数据库或
Microsoft 消息队列 (MSMQ) 访问。
松耦合意味着您可以在客户端上使用与服务器上不同的数据架构,并且在客户端传输数据。实际上,客户端和服务器不需要知道对方。您还可以独立地更新客户端和服务器组件。
该方法的主要缺点是您需要编写更多的基础结构代码,以便存储和转发消息以及检测应用程序何时联机或脱机。这可以使您在设计中具有更多的灵活性,但通常意味着在创建脱机客户端时需要完成更多的工作。
使用面向服务的方法设计偶尔连接的智能客户端应用程序
当您使用面向服务的方法设计偶尔连接的智能客户端时,需要解决许多问题。这些问题包括:
优选异步通讯。
尽可能减少复杂的网络交互。
添加数据缓存功能。
管理连接。
设计存储转发机制。
管理数据和业务规则冲突。
与类似于 Create, Read, Update, Delete (CRUD) 的 Web 服务交互。
使用基于任务的方法。
处理依赖性。
|