吴 泽
[摘 要]三层模式在网站开发方面已经非常普及,在整个软件开发业也非常流行,其优点正得到越来越多的人的认可。本文简单介绍了.Net的3层结构划分及各层的数据处理。1
[关键词] .Net 三层体系 数据
一、.Net概述
.Net技术是2000年6月由微软公司推出的,并为了推广.Net技术的应用,于同年9月又推出了企业服务器,并在以后几乎所有的虚拟设备上打了.Net的标签。但是由于对市场策略定位不明晰,人们对.Net技术的概念并不明确。使得2003年之后.Net逐渐被广泛理解和应用。
简单的说,.Net框架是一种新的计算机平台,它在各个方面简化了在分布式Internet环境中的应用程序的开发,崭新的开发工具Visual Studio.NET的推出,更是使许多曾经让人望而生畏的编程变得简单、明了。.NET正深刻地影响着现有的开发模式和开发方法。
所谓三层体系结构,是在客户端与数据库之间加入了一个"中间层",也叫组件层。不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即这三个层放置到一台机器上。
三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。
在多层分布式应用中,在客户端和服务器之间加入了一层或多层应用服务程序,这种程序称为"应用服务器"。开发人员可以将应用的商业逻辑放在中间层应用服务器上,把应用的业务逻辑与用户界面分开。在保证客户端功能的前提下,为用户提供一个简洁的界面。这意味着如果需要修改应用程序代码,只需要对中间层应用服务器进行修改,而不用修改成千上万的客户端应用程序。从而使开发人员可以专注于应用系统核心业务逻辑的分析、设计和开发,简化了应用系统的开发、更新和升级工作。
二、.Net 层设计
面向对象的、基于模块化的组件设计需要能够方便地修改应用程序的各个部分。完成这一目标的一种好方法就是在层上工作,将一个应用程序的主要功能分离到不同的层或者级中。.Net Framework为创建可维护、可扩展的层模式提供了丰富的支持,使得N层够架取代传统的客户机/服务器模式而与Internet紧密结合。
三、分层模型
从本质上讲,层代表了一个应用程序主要的功能。一般地,我们将应用程序功能分为三个方面,对应3层架构模式。它们是数据层、商务层和表示层。
数据层:包含数据存储和与它交互的组件或服务。这些组件和服务在功能上和中间层相互独立。
中间层:包括一个或者多个组件服务,它们应用商务规则、实现应用程序逻辑并完成应用程序运行所需要的数据处理。作为这个过程的一部分,中间层负责处理来自数据存储或者发送给数据存储的数据。
表示层:从中间层获得信息并显示给用户。该层同时也负责和用户进行交互,比返回的信息并将信息回送给中间层进行处理。
可见,数据层从数据库中获得较为原始的数据,商务层把数据转换成符合商务规则的有意义的信息,表示层把信息转换成对于用户有意义的内容。数据层和中间层之间的分离就显而易见--它们之间通过网络连接。这种分层设计方式很实用,因为每一层都可以独立地修改。我们可以修改商务层,不断地从数据层接受相同的数据,并把这些数据传递到表示层,我们也可以修改表示层,使得对于站点外观的修改不必改动下面的商务层逻辑。
四、常用的N层模型设计
一个N层应用程序中的层不是由运行应用程序的物理结构(硬件)定义的。层是应用程序运行的一个逻辑方面的功能,并定义应用程序将执行的不同的任务阶段。
(一)设计一个简单的三层
最简单的N层模型就是三层。我们有一个被网络分隔开的服务器和客户机。服务器中含有数据存储和组成数据层的数据访问组件,已经组成中间层的商务逻辑。客户机作为表示层只需要给应用程序提供界面即可。
在这个最简单的情况中我们或许有一个关系数据库或者一组访问数据的组件或者存储过程。然后我们应当有一个访问组件或者存储过程的asp.net页面来提取信息,处理和格式化信息使之适合于客户机,然后通过网络将信息传送给客户机。客户机做的事情就是显示信息、收集用户的输入和将信息回送给中间层。
(二)设计N层
很明显,上面的情况假定了两件事:一是客户机为一个低端设备不参与应用程序中所需的实际数据处理;另外就是只有一组商务规则。
但是,这些并不符合实际的应用程序。例如,"中间层"的真正意思是商务逻辑本身,并且,商务逻辑的不同元素可以无可非议地存在于不同的服务器中。我们通常期望商务规则在其他某个地方而非在中间层中。这样在提取数据过程的前期实现某个商务逻辑比较恰当,当然我们也可以在访问数据存储的组件中实现商务逻辑。这个商务逻辑"包"因此能和数据存储在同一个服务器上,甚至在另外一个中间服务器上。
另外,为了充分利用"胖客户机"的一些性能,以便减少网络负载和因访问路径循环而导致的迟滞,我们可以将一些商务逻辑放在客户机上。
对于客户机,这个提供了与原始对象相同的方法和属性。然而,当客户机与代理对象相互作用时,调用被自动串行化,并通过网络传送给服务器上的对象。然后,任何响应和结果通过通道被传送回客户机。
这两个远程技术都允许客户机使用原来在服务器上创建的对象。我们能够串行化一个DataSet对象或者Xml文档,同时我们也能串行化其它的如集合这样的对象(如一个哈希表等)。
这种模式没有中间存储并且几乎不需要中间数据处理,所以效率更高。
五、N层模型中的数据处理
.Net Framework实现了许多新的技术以支持多层分布式处理,它提供了丰富的类库、对象及方法使得在不同层间的数据传输更为简单。
(一)数据的提取
1.只用于显示的数据
以一种固定格式为终端用户显示数据的话,没有必要远程传输数据。我们没有必要在线上将所有的数据传送给客户机--我们只能传给它们客户设备能接受的任何格式的最终显示信息。因此"Reader"对象给我们提供了一种只读的、仅向前的理想且性能最优的技术。当与能实现服务器端数据绑定的服务器控件一起使用时,我们可以获得一个显示数据的高效方法。
2.需要远程传输的数据
如果我们需要远程传输数据的话则存在一个问题。这些快速而高效的"Reader"对象只在作为引用时才能被远程传输。将一个DataReader作为引用传送给一个客户机时,DataReader仍还在服务器上,不过客户机的应用程序也可以使用它。在这种情况下,我们实际上并没有远程传输数据,而是使用了一个远程传输对象。在很多情况下都存在这种情况。因此应该将数据寄存到一个能够存储数据的对象中,不需进入数据存储的额外行程就可以根据需要提取数据,在ADO.NET中,这个对象就是DataSet对象或者DataTable对象。这两个对象都有保持内容的能力,并且可以在一个应用程序的层之间进行传送。
(二)移动数据处理
一般地,要获得发送给客户机的数据,我们将利用客户端脚本(JavaScript或 VBScript以及 WMLScript)、用Java或者一个特定平台的语言书写的客户端组件,或者用诸如Visual Basic 6.0、C++、Delphi等语言书写的客户端可执行程序等等。所有我们需要的功能都是.Net Framework的一部分。
(三)将更新回送给服务器
在许多情况下,如果我们的要求就是以一种尽可能快速和高效的方式获得发送给客户机的依据,那么,上面的示例能很好地完成任务。然而,许多应用程序要求客户机将数据回送以更新数据存储等操作时,就需要寻找更合理的模式。
至少有三种方法用于向服务器端回送数据。一是回送Html表单和查询字符串(实现方式与以前的ASP类似);另一是客户端组件(例如IE5及以上版本的XMLHTTP组件);还有就是客户端可执行的Windows表单应用程序和服务等。
因此,应该有这样一种情况:客户机仅仅要求我们发送一些数据,并且我们让客户机完成所有的数据处理。也就是说,客户机充当某种类型的服务,它将应用程序的数据作为自己的源数据来使用,然后在它的客户机已经处理数据后将更改提交回来。
一旦客户端完成了数据更新,或者已经收集了用户输入的新数据,客户机应用程序就以一种合适的格式打包数据,并将它提交给服务器进行处理和存储。
N层分布是程序开发的趋势,本文在层次的划分上为您提供参考。
参考文献
[1]Microsoft.NET Compact Framewor,技术内幕,Stephen Wheelwright,清华大学出版社
[2]ASP.NET基础教程,Fritz Ooion,清华大学出版社
[3]c#高级编程,Simon Robinson等,清华大学出版社