曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
替换为报告编写和总结程序,这些改动不会对服务器端有任何影响。
图16-9
16.4.2 程序员服务客户
应用程序的客户只包含一个H T M L页面。程序设计管理员永远都是通过该页面使用应用程序
的。然而,客户和服务器之间存在着密切的交互和通信。客户通过查询两个服务获得与程序员
和程序员成果历史相关的数据。该数据分别用两个X M L数据词汇表进行编码。每个词汇表都是
与一个查询词汇表对应的。客户读取表单中的值,编码为适当的查询,并提交给适当的服务。
694使用XML 高级编程
下载
MSXML
解析器
当返回数据时, X M L是与表单绑定的。当程序设计管理员输入新的程序员数据,或者为现有的
程序员添加新的成果报告时,应用程序将该信息封装在数据词汇表中,并提交给服务器。
我们的系统使用两个对象类: I T S t a ff e r s和P r o j R e p o r t s。从程序设计管理员的角度看,
I T S t a ff e r s是从父公司的通用S t a ff e r类发展而来的,它增加了Ti e r属性。该属性反映了程序员所负
责的模块在三层编程模型中所处的层次:客户、应用程序逻辑或者数据服务。理想情况下,负
责开发管理I T S t a ff e r对象的服务的程序员应该让服务器同时处理I T S t a ff e r和S t a ff e r词汇表。这样,
服务就能够与任何能处理S t a ff e r信息的应用程序共享I T S t a ff e r信息的S t a ff e r子集。这种设计方式
符合原则5,降低服务对数据的要求。对于I T部门及其程序员来说,项目成果报告历史是唯一的。
由于这些报告对于I T S t a ff e r s是唯一的,因此最好通过另一个服务管理数据,而不是使用相同的
服务处理I T S t a ff e r s和S t a ff e r s。
当然,说实话,本章的整个实例研究都是我们设计的,因此根本不存在S t a ff e r处理代码。
而且,I T S t a ff e r s相对于S t a ff e r而言特殊化之处很少。然而,考虑一下现实世界的员工。他
们应该有详细的描述,而不仅仅是姓名和职称。私人信息,例如:美国的社会保障号,
应该受到特殊代码的保护,防止未授权的访问。通过在词汇表中增加特殊的限制创建
I T S t a ff e r s时,也要包含类似的代码。例如,我们可能要维护程序员所掌握的编程语言和
熟悉程度的列表。在这种情况下,Staffers和ITStaffers的代码应该明确地区分开。
总之,客户是与管理数据的服务器端代码分离的。只要客户使用我们在前几章介绍的技术,
在服务器端就可以随意选择任何数据库或文件管理技术。更重要的是,任何人只要知道我们定
义的X M L词汇表,就能够使用我们开发的服务。相反,服务器与客户端采用的技术无关。虽然
我们使用了数据绑定,服务不一定要支持这种绑定。我们能够将服务移植到不支持Wi n d o w s数
据管理技术的另一种操作系统上,应用程序照样可以运行。
16.4.3 服务
我们开发的服务是用A S P实现的。这些A S P通过A D O访问A c c e s s数据库中的程序员数据,这
是目前最简单的技术。由于整个系统是从头开始开发的,因此我们能够自由选择适于我们的平
台并且能够有效满足系统需求的技术。然而,现实中的许多组织机构在主机系统上存有遗留的
数据。他们只能通过消息或某些专有的A P I访问这些数据。
系统提供的两种服务具有类似的格式。它们从名为X M L R e q u e s t的表单元素中提取值,解析
X M L,并确定所提交的是哪个词汇表。根据我们的约定,程序员和项目成果报告应该封装为集
合。即使特殊的客户每次只提交一条程序员记录或者一个成果报告,在客户和服务之间来回传
递程序员和报告集合也是非常合理的(实际上,服务器常常会向客户传递这种集合)。一旦服务
器确定了所用的词汇表,它产生S Q L查询语句并执行它,然后以X M L文档的形式将数据返回给
客户。从查询的角度而言,它是一个包含零个或多个程序员或项目成果报告集合。从客户的提
交而言,它是一个对客户的肯定或否定的确认。
A S P是纯粹的脚本,它只返回X M L。其中不包含H T M L、H E A D或B O D Y元素。它使用了
M S X M L和A D O对象,但是这些都是动态创建的。因此, A S P返回的X M L不是完整的We b页面,
第16章实例研究2—XML和分布式应用程序使用695 下载
而更像是一小段程序片段。
16.4.4 交换词汇表
为了实现客户与服务器之间的数据交换,我们的应用程序需要四个X M L词汇表。客户端需
要向服务器请求符合某些标准的程序员,以及特定程序员的报告。相反,服务器需要返回匹配
程序员查询的程序员集合,以及匹配成果报告查询的报告集合。另外,客户要使用程序员和报
告集合词汇表向服务器传送新的程序员和报告。
1. 程序员查询
我们决定允许应用程序根据程序员的姓氏和员工I D查询I T S t a ff e r服务。由于我们的用户界面
不显示员工I D,因此对于该字段,这个特殊的客户端将提交空元素。下面是S t a ff Q u e r y文档的外
壳:
虽然我们不使用D T D验证文档的有效性,但是以上外壳可以更加正式地定义为:
2. 项目成果查询
对于一个较大的部门,员工查询会导致向客户应用程序返回多条记录。每条记录都包含一
个员工I D,当我们需要搜索特定程序员的成果报告时,可以根据这个I D进行更精确的查找。实
际上,我们之所以需要这种精确性,也是为了避免混淆多个程序员的报告记录。下面是
P r o j P e r f o r m a n c e Q u e r y的外壳:
它对应于以下D T D:
3. 程序员应答
对于S t a ff Q u e r y查询,应答中返回的文档由包含一个或多个I T S t a ff e r元素的C o l l e c t i o n构成。
如前所述,I T S t a ff e r是S t a ff e r的特例。S t a ff e r元素包含用于表示姓名、员工标识符和职称的元素。
I T S t a ff e r元素除了包含S t a ff e r元素之外,还包含用于表示程序员所负责的编程层次的元素。所有
元素都是必须出现的。下面是包含一个I T S t a ff e r元素的文档外壳:
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(59)