智能客户端应用程序是瘦客户端应用程序的强大替代产品。它们可以为用户提供内容丰富且响应迅速的用户界面,提供脱机工作的能力,并且提供利用本地硬件和软件资源的方法。此外,可以将它们设计为在各种各样的客户端设备上运行,包括桌面 PC、平板 PC 以及手持移动设备(如 Pocket PC 和 Smartphone)。智能客户端为用户提供了在强大且直观的客户端环境中访问信息和远程服务的能力,并且是一种用来开发灵活的、面向用户的应用程序以及提高用户工作效率和满意度的有效的解决方案。
经过设计,智能客户端应用程序可以将胖客户端应用程序的传统优点与瘦客户端应用程序的可管理性优点结合起来。然而,要完全实现智能客户端应用程序的优点,需要考虑许多体系结构和设计问题。本指南描述了您在设计和实现智能客户端应用程序时将面临的体系结构和设计难题。它提供了有关如何克服这些难题的指导,从而使您能够在尽可能短的时间内实现智能客户端应用程序的优点。
胖客户端应用程序
在二十世纪九十年代中期,为 Microsoft® Windows® 操作系统开发的胖客户端应用程序的数量急剧增长。设计这些客户端的目的是利用本地硬件资源以及客户端操作系统平台的功能。
尽管许多上述应用程序的功能令人印象深刻,但它们都具有局限性。许多上述应用程序是独立的并且在客户计算机上工作,对它们的工作环境所知甚少或一无所知。该环境包括其他计算机和网络上的任何服务,以及用户计算机上的任何其他应用程序。非常常见的情况是,应用程序之间的集成局限于使用 Windows 提供的剪切或复制并粘贴功能在应用程序之间传输少量的数据。
有一些有助于提高胖客户端应用程序连接性的技术。例如,两层应用程序使多个用户可以访问驻留在网络上的公用数据,而 DCOM 使应用程序可以具有更高的分布性。(就 DCOM 而言,不再将逻辑和状态与客户计算机相联系,而是将其封装在对象内,然后在多台计算机中分布这些对象。)但是,连接的应用程序的开发要复杂得多。随着这些分布式应用程序的规模和复杂性逐渐增加,将越来越难以维持客户端应用程序及它们使用的服务之间的紧耦合。
尽管胖客户端通常提供了高质量、响应迅速的用户体验,并且具有良好的开发人员和平台支持,但它们非常难于部署和维护。随着应用程序和客户端平台的复杂性不断增加,以可靠且安全的方式将应用程序部署到客户计算机的难度也将不断增加。如果部署了不兼容的共享组件或软件库,则一个应用程序可以很容易地破坏另一个应用程序,这种现象称为应用程序脆弱性。新版本的应用程序通常通过重新部署整个应用程序来提供,这可能使应用程序脆弱性问题变得更加严重。
瘦客户端应用程序
Internet 提供了传统胖客户端模型的替代模型,它解决了许多与应用程序部署和维护相关联的问题。基于浏览器的瘦客户端应用程序是在中央 Web 服务器上部署和更新的;因此,它们消除了将应用程序的任何部分显式部署到客户计算机并加以管理的必要性。
该模型使各个公司可以非常高效地将它们的应用程序公开给规模庞大、多种多样的外部受众。因为瘦客户端已被证明能够高效地解决一些部署和可管理性问题,所以它们现在用于向组织内的用户提供对许多业务线 (LOB) 应用程序的访问,以及向客户和合作伙伴提供对面向外界的应用程序的访问。尽管事实上这两种用户的需要和期望通常是根本不同的,也是如此。
瘦客户端应用程序具有一些缺点。浏览器必须总是具有网络连接。这意味着移动用户在断开连接时将无法访问应用程序,因此当他们返回办公室时,必须重新输入数据。而且,常用的应用程序功能(如拖放、撤消-重复以及上下文相关帮助)可能不可用,这可能降低应用程序的可用性。
因为应用程序的大部分逻辑和状态位于服务器上,所以瘦客户端会频繁地向服务器发回数据和处理请求。浏览器必须等待响应到达,然后用户才能继续使用该应用程序;因此,该应用程序的响应速度通常要比胖客户端应用程序慢得多。该问题在低带宽或高延迟的情况下被恶化了,并且产生的性能问题可能导致应用程序可用性和用户效率大幅度下降。要求输入大量数据以及/或者在多个窗口中频繁导航的 LOB 应用程序尤其会受到这一问题的影响。
智能客户端应用程序
经过设计,智能客户端应用程序可以将胖客户端应用程序的优点与瘦客户端应用程序的部署和可管理性优点结合起来,尽管这两种方法之间的平衡的准确性质取决于确切的情况。
智能客户端应用程序通常具有形形色色的要求,因此在设计和实现方面会有极大的差异。但是,所有智能客户端都具有下列部分或全部特征:
•
|
利用本地资源
|
•
|
利用网络资源
|
•
|
支持偶尔连接的用户
|
•
|
提供智能安装和更新
|
•
|
提供客户端设备灵活性
|
许多应用程序不需要具有上述所有特征。当您设计您的智能客户端时,将需要仔细考虑您的应用程序方案,并且决定您的智能客户端应用程序要求具备上述哪些特征。要将上述所有特征合并到您的应用程序中,将需要进行非常认真的计划和设计,并且在很多情况下您将需要大量的实现资源。
注 .NET 框架可以帮助您实现智能客户端应用程序的许多特征。该框架提供了具备自我描述能力且牢固绑定的程序集,并且支持单独和并列安装应用程序的多个版本,从而有助于减少与胖客户端相关联的应用程序部署和脆弱性问题。.NET 框架基类库为与 Web 服务进行交互提供了广泛的支持,并且提供了 Windows 窗体。通过使用公共语言运行库 (CLR),您可以利用任何受到 .NET 支持的语言来开发智能客户端。
使用本地资源
设计良好的智能客户端应用程序最大限度地利用了代码和数据部署在客户端上并且在本地执行和访问这一事实。它为应用程序提供了内容丰富且响应迅速的用户界面,以及强大的客户端处理能力。例如,它可能使用户能够执行复杂的数据操作、可视化、搜索或排序操作。
智能客户端可以利用客户端硬件资源(如电话或条码读取器)以及其他软件和应用程序。这使它们非常适合于解决瘦客户端应用程序(如销售点终端应用程序)无法很好解决的问题。智能客户端还可以利用本地软件(如 Microsoft Office 应用程序)或客户计算机上安装的任何 LOB 应用程序。通过创建能够与多个 LOB 应用程序集成并对这些应用程序进行协调的解决方案,您的用户可以更为有效地工作,进行更好的决策,并减少数据输入错误。此类解决方案还可以使您的应用程序更加紧密地与用户的工作环境集成(例如,通过采用自定义的或熟悉的用户界面),从而降低培训成本。
可以通过智能客户端应用程序集成或协调其他客户端应用程序,以便提供一致且高效的总体解决方案。这些应用程序还应该了解正在使用应用程序的上下文,并且应该适应该上下文以尽可能地帮助用户;例如,通过根据用户的使用模式或角色抢先缓存适当且有用的数据。
通过最大限度地使用本地资源以及将本地资源集成到您的智能客户端应用程序,可以使您的应用程序更好、更有效地使用已经提供给您的硬件。非常常见的情况是,处理能力、内存和高级图形功能没有得到利用。使用客户计算机上的资源还可以减少服务器端硬件要求。
使用网络资源
智能客户端可以通过网络消耗和使用不同的服务和数据。它们是从许多不同的源检索数据的有效方式,并且可以设计为对数据进行分析或整合,从而使用户能够进行更为有效和明智的决策。例如,智能客户端可以使用映射服务来提供有关地点和驾驶方向的详细信息。
智能客户端应用程序应该尽可能地连接,并且应该利用可以通过网络使用的资源和服务。它们不应该是独立的应用程序,并且应该总是构成更大的分布式解决方案的一部分。智能客户端应用程序起码应该使用有助于维护该应用程序以及提供部署和更新服务的集中式服务。
智能客户端应用程序的连接性质使其可以提供有价值的数据整合、分析和转换服务。它们使用户可以实时地或者在一段时间内协作完成任务。在许多情况下,智能客户端应用程序可以向用户提供类似于门户的功能,从而将完全不同的数据和服务加以协调并集成到总体解决方案中。
支持偶尔连接的用户
可以将智能客户端设计为向偶尔连接到网络的用户提供功能,从而使用户可以在明确脱机、使用低带宽或高延迟网络,或者连接时断时续的情况下继续高效地工作。对于移动应用程序,智能客户端还可以优化网络带宽 — 例如,通过将请求批量发送到服务器,以便更好地使用代价昂贵的连接。
即使当客户端大多数时间都连接到网络时,智能客户端应用程序也可通过以智能方式缓存数据和管理连接来改善性能和可用性。例如,在低带宽或高延迟环境中,智能客户端应用程序可以用特殊的方式管理连接,即不损害应用程序的可用性和响应性,并且用户可以继续高效地工作。
通过使用户能够在断开连接或只偶尔连接的情况下工作,提高了用户的工作效率和满意度。智能客户端应用程序应该致力于在脱机时提供尽可能多的功能。
提供智能安装和更新
传统胖客户端所具有的一些最大的问题发生在部署或更新应用程序的时候。许多胖客户端应用程序具有大量复杂的安装要求,并且可能通过注册组件以及/或者在公共位置安装 DLL 来共享代码,从而导致应用程序脆弱性和更新困难。
可以对智能客户端应用程序进行设计,以使其按照远比传统胖客户端应用程序更智能和灵活的方式来管理它们的部署和更新。它们可以避免上述常见问题,从而有助于减少应用程序的管理成本。
有许多部署智能客户端的不同方式。这些方式包括:简单地将文件复制到本地计算机;使用非接触式部署自动从中央服务器下载代码;或者使用企业推技术如 Microsoft Systems Management Server (SMS) 来部署 Windows Installer 软件包。您选择的方法将依赖于您的特定情况。
智能客户端应用程序可以在其运行时或位于后台时对自身进行自动更新。这一功能使其可以逐个角色地进行更新;以分阶段的方式更新,从而可以将应用程序推介给先导小组或受限的用户组;或者按照制定的时间表更新。
.NET 框架使您可以对应用程序组件进行强命名,这意味着应用程序可以指定用来生成和测试其确切版本的组件,并通过这些版本的组件运行。.NET 框架使应用程序可以相互隔离,以便在安装一个应用程序时不会破坏另一个应用程序,并且同一应用程序的多个版本可以并列部署。这些功能大大简化了应用程序部署,并且消除了许多与胖客户端应用程序相关联的应用程序脆弱性问题。
提供客户端设备灵活性
智能客户端还可以提供灵活且可自定义的客户端环境,从而使用户可以将应用程序配置为支持他或她喜欢的工作方式。智能客户端应用程序没有被限制到桌面计算机或膝上型计算机。随着小规模设备的连接性和能力的增加,愈发需要能够提供对多个设备上重要数据和服务的访问的有用客户端应用程序。与 .NET 框架压缩版一起,.NET 框架提供了一个可用来生成智能客户端应用程序的通用平台。
可以对智能客户端进行设计以使其适应宿主环境,并且为它们运行时所在的设备提供适当的功能。例如,适合在 Pocket PC 上运行的智能客户端应用程序应该提供相应的用户界面,该用户界面在较小的屏幕区域上被调整为使用笔针。
在许多情况下,您需要设计多个版本的智能客户端应用程序,每个版本都面向特定的设备类型,以便充分利用该设备所支持的特定功能。因为小规模设备通常在提供完整范围的智能客户端应用程序功能方面受到限制,所以它们可能只提供对功能完善的智能客户端应用程序所提供的数据和服务子集的移动访问,或者它们可用于在用户移动时收集和整合数据。最后,可以由功能更加完善的智能客户端应用程序或服务器端应用程序来分析或处理这些数据。
能够感知目标设备的功能和使用环境(无论它是桌面、膝上型、平板还是移动设备),以及能够定制应用程序以提供最适当的功能,这些都是许多智能客户端应用程序的基本特点。
智能客户端在设计和实现方面差异极大,这既包括应用程序要求,也包括可以使用它们的方案和环境的数量。因此,智能客户端可以采取许多不同的形式和风格。根据智能客户端应用程序所面向的平台,可以将这些形式划分为三大类:
•
|
Windows 智能客户端应用程序
|
•
|
Office 智能客户端应用程序
|
•
|
移动智能客户端应用程序
|
智能客户端应用程序面向上述一种或多种平台是很常见的情况,具体取决于用户的角色以及需要的功能。这种灵活性是智能客户端应用程序的主要长处之一。
本指南的其余部分将重点讨论所有三种类型的智能客户端应用程序所共有的问题,而不是详细解释影响个别类别的问题。但是,依次对各个类型进行简要分析,以便您可以确定哪种风格的应用程序最适合您的情况,这将是很有用的。
Office 智能客户端应用程序
Microsoft Office System 2003 为您提供了用来生成智能客户端应用程序(尤其是在企业设置中)的有用平台。通过 Office 智能客户端解决方案,您可以将通过 Web 服务访问的数据源与 Word 2003、Excel 2003、InfoPath 2003 或其他 Office应用程序的功能集成起来,以开发智能客户端解决方案。
这样的 Office 智能客户端应用程序可以成为组织的信息管理周期的集成部分,而不只是文档数据的静态容器。当用户在文档内工作时,它们可以提供上下文相关的数据,以及可以将 Web 服务公开的数据转换为有用信息的工作流和任务指导、数据分析、协作、报告和呈现功能。
Microsoft Office 支持 XML,并且可以将该数据与文档的其他方面分开,以便它可以由其他应用程序重新使用。因为 Microsoft Office 中的应用程序数据可以由多个应用程序中相同的客户定义 XML 架构进行说明,所以开发人员可以将这些数据集成到智能客户端应用程序中。
Microsoft Office 2003 具有许多用于生成智能客户端解决方案的重要功能和选项。这些功能和选项包括:
•
|
智能标记。智能标记为应用程序提供一种方法,可以为用户提供与文档内容有关的上下文相关数据,用户在文档内工作时,可以通过该方法容易地查看和使用相关信息。例如,使用智能标记,可以在文档内引用客户时提供相应客户的帐户状态,或者可以在键入订单 ID 时提供订单状态信息。这种上下文相关的反馈使用户可以在工作时进行更为明智的决策。
|
•
|
智能文档。智能文档为用户提供了更为强大的与文档和业务 Web 服务进行交互的方法。智能文档是 Word 2003 和 Excel 2003(它们具有基础 XML 结构和自定义的任务窗格)的一种新的解决方案模型。可以使用该任务窗格向用户显示上下文信息、任务、工具、后续步骤以及其他相关信息。用户能够通过与该任务窗格交互来启动其他操作和任务,从而可以构建综合性业务解决方案。
|
•
|
适用于 Microsoft Office System 的 Microsoft Visual Studio_ 工具。该工具套件使开发人员能够通过使用 Microsoft Visual Studio .NET 2003 开发系统来创建托管代码 Office 智能客户端应用程序。开发人员可以将文档解决方案与基础代码分开(与以前的包含带有自定义逻辑的 Visual Basic for Applications 宏的智能客户端模型相比,这是一种替代解决方案)。通过将托管代码与 Microsoft Office 一起使用,开发人员可以获得更多为智能客户端解决方案创建、部署和管理更新的有效选项。
|
•
|
Microsoft Office InfoPath™ 2003。InfoPath 2003 是能够使用类似于表单的界面从用户那里收集结构性数据的应用程序。InfoPath 2003 提供了对 XML Web 服务(一种基于表单的用户界面)的支持,以及对标准技术(如 WSDL 和 UDDI)的支持。InfoPath 2003 支持有限的脱机使用,方法是允许用户在脱机时与表单进行交互,然后允许用户在联机时将该表单转发给 Web 服务。
|
移动智能客户端应用程序
移动智能客户端是在智能设备上运行的应用程序,这些智能设备包括 Pocket PC、Smartphone 以及其他超小型台式设备(如机顶盒)。这些应用程序是使用 .NET 框架压缩版(它是完整 .NET 框架的子集)开发的。
.NET 框架压缩版具有完整 .NET 框架的许多功能,支持 XML,并且消耗 Web 服务。它被进行了优化以便在超小型台式设备上使用,并且它包含用于开发用户界面的 Windows 窗体设计器。
通过使用 Visual Studio .NET 智能设备项目,您可以开发能够在 .NET 框架压缩版上运行的智能客户端。采用这一方法,您可以通过在超小型台式设备的模拟器上使用 Visual Studio .NET 来开发、测试和调试应用程序。模拟器的使用大大加快了这些类型应用程序的开发和测试速度。
移动智能客户端应用程序通常用于提供对重要数据和服务的移动访问,或者在用户处于移动状态时收集和整合数据。这些类型应用程序的示例有保险和金融数据收集应用程序、库存管理应用程序和个人工作效率管理应用程序。
对智能客户端和瘦客户端进行取舍
要针对您的情况选择正确的应用程序体系结构,必须考虑许多因素。要确定智能客户端方法是否最适合您的应用程序,请认真考虑您当前和将来业务应用程序的需要。如果您的应用程序基于不适合的体系结构,则它可能无法满足用户和整个企业的要求和期望。如果以后更改体系结构以满足新的要求或者利用新的机遇,则可能要付出极为高昂的代价。
如果您需要向各种外部受众提供面向外界的应用程序,则瘦客户端体系结构通常最为适当;而对于需要与其他客户端应用程序或硬件集成或者对它们进行协调,或者需要脱机工作或通过响应迅速的用户界面提供特定高性能功能的内部应用程序而言,智能客户端体系结构通常最为适当。
实际上,这两种方法在很大程度上互相重叠,而且每种方法都具有明显的优点和缺点。您只有在认真考虑您的要求并且了解如何在您所处的场合下应用每种方法之后,才能够选择正确的方法。您可以使用表 1.1 来帮助您对智能客户端和瘦客户端体系结构进行取舍。
表 1.1 瘦客户端和智能客户端的特点
特点
|
瘦客户端
|
智能客户端
|
提供内容丰富的用户界面
|
可以,但难以开发、测试和调试。通常将应用程序与单个浏览器联系起来。
|
是。更易于开发、测试和调试。
|
可以利用本地计算机上的硬件资源
|
是,但只能通过 COM 组件使用。
|
是
|
可以与其他本地应用程序交互
|
否
|
是
|
可以多线程化
|
否
|
是
|
可以脱机工作
|
否
|
是
|
在低带宽和高延迟环境中可以很好地执行。
|
否
|
是
|
易于部署
|
是
|
不一定。困难程度取决于应用程序要求。
|
低维护和更改管理成本
|
是
|
不一定。成本取决于应用程序要求。
|
可以部署到具有不同功能的多种客户端上。
|
是,尽管更复杂的瘦客户端可能要求单个浏览器。
|
是。可以在支持 .NET 框架(包括 .NET 框架压缩版)的任何平台上部署。
|
智能客户端体系结构难题
智能客户端的体系结构难题不同于瘦客户端,并且您需要在您的应用程序设计中予以考虑。智能客户端应用程序具有显著的优点,但是您只有在适当地解决这些难题之后才能实现这些优点。
通过智能客户端可以将数据和逻辑分发到客户计算机,而瘦客户端则倾向于将数据和逻辑集中存放在 Web 服务器和其他后端服务中。尽管可以通过智能客户端方法使应用程序变得更加高效,并且不需要与服务器进行往返通讯以确定后续步骤,但您需要考虑到应用程序及其数据现在比瘦客户端应用程序分布得更为广泛,并且相应地修改您的设计。
如果您要在客户端上实现业务规则,您将需要在必要时更新这些规则,而不是更新整个应用程序。这可能意味着您需要使用不同的机制来分别更新该应用程序以及更新该应用程序内部的业务规则。
通过在客户端上缓存数据,您可以显著改善应用程序的性能和可用性,但您必须确保适当地刷新数据并且不会使用陈旧的数据。因为许多用户可以访问和使用相同的数据,您还必须考虑数据并发的影响。您的应用程序必须能够处理出现的数据冲突或一致问题,因为应用程序现在分布得更为广泛,并且可以脱机操作。
.NET 框架在智能客户端应用程序的宿主方式方面提供了极大的灵活性。应用程序可以作为传统桌面应用程序运行,还可以宿主在 Office 或 Microsoft Internet Explorer 内。也可以进行许多种组合。例如,Windows 窗体应用程序可以宿主 Internet Explorer 或 Office 组件,并且任何宿主都可以包含任何其他宿主。
您可以将不稳定的应用程序逻辑(例如,控制大订单折扣的业务规则)结合到根据需要通过 HTTP 下载的程序集中。这样做消除了在开发新应用程序逻辑时部署新版本客户端应用程序的需要。您可以使用与附加(或不常使用)应用程序功能相同的模型,以便使初始应用程序规模保持最小,并且根据需要安装附加功能。
您可以选择将您的智能客户端作为复合应用程序进行部署,此时许多应用程序组合起来构成一个统一的解决方案。可以通过耦合桌面应用程序,或者通过提供一般性的外壳应用程序以容纳多个共同构成解决方案的轻型应用程序,来构成这样的解决方案。
当用户必须访问许多应用程序以完成其工作时,复合应用程序尤其有用。例如,呼叫中心中的客户服务代理通常必须使用许多 LOB 应用程序,包括桌面应用程序、基于浏览器的应用程序以及基于终端的应用程序。所有这些 LOB 应用程序都可以宿主到在它们之间提供集成的普通 Windows 窗体应用程序中,从而大大简化用户的工作,最为重要的是减少花在特定呼叫上的时间。通过提供普通外壳来宿主这些 LOB 应用程序,可以在不同的解决方案中开发、测试和重用通用基础结构功能,如安全性、部署、窗口管理、应用程序集成、审核等等,从而使 LOB 应用程序的开发人员能够将精力集中于业务功能。
面向服务的体系结构的出现意味着您可以设计智能客户端来利用网络服务。所有此类服务都是以行业标准方式提供的,这就改善了互操作性、开发人员工具支持以及在智能客户端应用程序中内置新功能的容易程度。