
要进一步理解怎样在应用程序中划分不同的层,需要确定数据如何显示以及是否需要更新数据和向服务器及时返回更新。
1、全部在服务器上完成显示
在客户机上显示数据,最常见的情形是在一组或者多组服务器上执行所有的数据处理。数据层和中间层限于服务器,客户机只提供显示接口。对于一个web浏览器来说,通常的格式为html,对于一个蜂窝式电话或类似设备来说,可能是以wml格式表示,等等。
使用一个存储过程或SQL语句来提取所需要的数据,然后用asp.net进行处理,或者执行一个web服务。另外,这里也用xml片段的形式从数据存储中提取数据,然后对数据进行处理并提供给客户机。
如果以xml文档形式存储数据,或者以这样一种格式存储数据:数据作为xml外置数据层,那么我们就有一些其他的选择。
显示了怎样提取和处理xml数据以便传送给客户机使用。此外,数据的提取其实就是借助一个"Reader"对象,并且可以使用不同的技术来处理数据并将数据提供给客户机。
2、扩展中间层
虽然数据的提取和处理经常在一个对象里发生,比如一个Asp.Net页面,但是为了有效利用由于使用基于组件的设计而提供的好处,通常需要提供更为精细的架构。我们应该有在显示数据或者将其传送给客户机之前应用于数据的商务规则。换句话说,它可能是因为安全的原因,也可能是为了实现分布式处理,或者只是提供可重用性和使应用程序的维护更加容易。
例如,应该有访问一个数据存储并提取一系列消费者的多个页面。通过在一个独立于asp.net页面或其他提供数据给客户机的对象的组件中建立这个过程,我们能够提供一个提取数据的层。然后,我们在将来需要在某些方面改变数据存储或者数据结构,或者改变访问它的规则,我们只要用一个新的版本替换组件即可。
只要组件的接口仍然未变,所有使用这个接口的应用程序将看到来自组件的相同输出并和以前一样继续运行。然而,组件在内部用来提取和处理来自数据存储的数据的方法可以根据需要进行相应修改。
显然,该过程可以使用多个组件。如果数据的提取相当复杂,或者同一数据运用在多个地方的话,进一步分解数据处理(分解为更多组件层)就很有意义。例如,可用一个组件将数据当作一系列包含所有必须列的行(以关键字顺序排列),这个组件就可以成为其他以不同顺序存储数据的组件,或者仅外置数据的某些列的组件的数据源。
3、移动数据处理到客户机
一般地,要获得发送给客户机的数据,我们将利用客户端脚本(JavaScript或 VBScript以及 WMLScript)、用Java或者一个特定平台的语言书写的客户端组件,或者用诸如VisuaBasic 6.0、C++、Delphi等语言书写的客户端可执行程序等等。当然,所有我们需要的功能都是.Net Framework的一部分。(用户可通过下载和安装可重新分配的Framework(大约5MB)在客户机上使用Framework)。
4、将更新回送给服务器
在许多情况下,如果我们的要求就是以一种尽可能快速和高效的方式获得发送给客户机的依据,那么,上面的示例能很好地完成任务。然而,许多应用程序要求客户机将数据回送以更新数据存储等操作时,就需要寻找更合理的模式。
至少有三种方法用于向服务器端回送数据。一是回送Html表单和查询字符串(实现方式与以前的ASP类似);另一是客户端组件(例如IE5及以上版本的XMLHTTP组件);还有就是客户端可执行的Windows表单应用程序和服务等。
因此,应该有这样一种情况:客户机仅仅要求我们发送一些数据,并且我们让客户机完成所有的数据处理。也就是说,客户机充当某种类型的服务,它将应用程序的数据作为自己的源数据来使用,然后在它的客户机已经处理数据后将更改提交回来。
一旦客户端完成了数据更新,或者已经收集了用户输入的新数据,客户机应用程序就以一种合适的格式打包数据(或者用正确的技术整理数据),并将它提交给服务器进行处理和存储。