在公司的例会上,你的老板给你布置了一个新任务。这个任务听起来一点也不难,你所要做的一切就是为你公司的网站建立一个“简单”的基于Microsoft .NET的内容管理系统(CMS)。当你离开会议厅时,你可能刚刚开始觉得蹊跷:为什么没有人试图得到这个任务,你甚至记起当宣布这个项目时,你的几个同事都躲了起来,这究竟是怎么回事?
你也许还不知道,这个新任务会逼着你必须学习许多新技术,如HTML、JavaScript,、ASP.NET、C#、SQL、XML、 ADO.NET、 .NET remoting、网络服务等。你还需要掌握几个概念,如n层(n-tier)体系结构、数据库开发、版本控制、工作流(workflow)、个人化(personalization)和安全等等。
无论你是否认同这一点,你无疑是得到一个好项目,因为在开发过程会逼得你学到很多东西。唯一的遗憾就是没有人会立即认识到你在完成这个“简单的”项目后变得多么博学了。
有一大堆文章谈到建立你那个“简单”的CMS(内容管理系统)所需要的内容。沿着这条路走下去,我们将探索与CMS开发有关的众多技术和概念。我们在开篇文章所提到的技术在会在我们的实现样本中一一出现。那让我们从基本体系结构(即三层和多层体系结构)来开始本系列文章吧。
CMS三层体系结构
我曾在开发CMS(内容管理系统)三层体系结构上受到好评,不过那已经是好久以前的事了。CMS三层体系结构与标准三层客户端/服务器体系结构是基本对应的。CMS三层体系结构没有什么难以理解的内容,都是一些常识性的东西。它的每一层对应着一个体系结构中必须的元素:交互(interaction)、操作(manipulation)以及存储。这三层是:
表示层——处理与用户的交互、交流。
事务逻辑(business logic)层——处理用户所需要的信息。
数据库层——存储系统所处理的所有数据。
图A中直观的表示了CMS三层体系结构。图A所示的层分别位于不同的机器上,实际上,多个层可以存在于同一台计算机中,但是将它们分布在多台计算机中可以更好的分配CMS系统的负荷。
图A
CMS三层体系结构
CMS n层体系结构
简单的说,CMS n层体系结构就是把CMS三层体系结构的各个层分解为多个层,如图B所示。把层进行分解的好处是使得各个层更好的协调工作从而提高了系统性能;同时这也使得系统分布在更多的计算机上,这样可以减少系统由于指定计算机耗时过多而造成的瓶颈,从而提高了系统负荷。
图B
CMS n层体系结构
表示层是什么?
尽管表示层并不见得比其它层更重要,但是它几乎得到了全部的荣耀——因为它是唯一的CMS用户可以看到的层。这个层负责CMS与用户的交互工作。
表示层实际上由两部分组成:即Web客户端和Web服务器。Web客户端驻留在用户计算机中,通常用来接受Web浏览器的表格(form)。Web服务器位于Web主机地址上,用来生成动态Web页面和组成CMS系统的表格。
Web客户端与Web服务器端通过“请求——回应”的方式来相互通信。Web客户端向Web服务器发出请求,Web服务器根据请求作出回应。
Web客户端使用的是HTTP的请求方式。如:
GET /index.html HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
Host: www.contentmgr.com
Web servers respond using the HTTP response. For example:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 12 Jul 2002 19:19:52 GMT
Connection: Keep-Alive
Content-Length: 1270
Content-Type: text/html
Set-Cookie: ASPSESSIONIDQQQGQGDC=MOFPDBPCPNIBACIBDCIOFCCL; path=/
Cache-control: private
...HTML嵌入了Web服务器发出的回应,该回应用来指示浏览器显示什么内容;JavaScript用来实现客户端的基本功能。最近以来,其它技术,如Java applet和ActiveX组件开始流行了,不过Web服务器在最初发出的回应中,绝大多数还是使用HTML,这包括了服务器发出的用于通知客户端使用何种HTML以外的技术来接管后面的执行过程的回应。
事务逻辑层是什么?
重申一次,事务逻辑层的功能可以放到单个的服务器上(三层体系结构),也可以分布到多个服务器上(n层体系结构)。事务逻辑层的功能包括以下三个部分:
访问(获取和保存)数据库层的数据。
从表示层获取数据。
执行必要的运算并且/或者处理数据。
事务逻辑层从数据库层获取数据,并根据表示层的需要来对数据进行处理。事务逻辑层也可以获得表示层提供的数据,并根据数据库层的需要对其进行处理。
CMS事务逻辑层的许多逻辑与其它两个层的交接(interfacing)有关。在Microsoft.NET下,由于ADO.NET、.NET remoting和Web服务器的帮助,这种逻辑的复杂性大多都被降低了。有了.NET之后,该层的最复杂的逻辑就是用于处理事务逻辑而进行计算和处理数据任务了(用C#或者Managed C++)。
什么是数据库层
数据库层的名字告诉了我们它的任务是什么了;它用来处理CMS数据。一个不太引人注意的地方就是,它的数据存储和检索功能并不限制于数据库。它可以是单个或者一系列平面文件(flat file),可能是XML格式。不过,数据通常还是存在数据库中。数据库的类型并不重要,因为对绝大多数CMS系统来说Microsoft SQL Server 2000与Oracle以及Sybase同样优秀(至少,你在Windows环境下)。也就是说,微软公司已经为Microsoft SQL Server 2000优化了.NET接口(interface);这可能会给它一个小小的优势(edge)。不过其它数据库提供商也没有闲着,微软的这个优势很快就会消失。
如果你不偏好某种数据库,你最好按通用的方式编写代码,这样你可以把任何数据库嵌入到你的CMS中。谁知道将来会怎样?今年所选择的数据库,明年你可能就不想再用了,是不是?
数据库层通常有它所在的计算机加载和访问。在大型的CMS中,通常在另一台计算机上保存一个镜像拷贝,这样可以在主机发生故障时,可以用它来顶替。
数据库层的内部工作过程、以及数据库本身,对一般的编程者来说是一个迷。开发者在本层的主要任务就是建立数据库、创建并载入数据库纲要(schema),偶尔也需要生成报表,还有一点就是要常常备份数据库。
选择哪一种体系结构?
选择哪一种体系结构(三层或者n层)取决于以下因素:
CMS 需要实现的功能
数据的数量
并行工作的用户数量
预期的增长
基本上,如果你的CMS系统将一直保持较小的规模,最好选择三层体系结构。相反,如果你估计CMS系统会越来越大,n层体系结构是一个明智的选择。
由于服务器间的通信量不高,三层体系结构更容易实现。但是在.NET中,并不一定要这么做。由于三层体系容易构建,所以可以早日投入使用。这样,如果市场要求很急迫,三层体系结构也可以作为大的CMS系统的暂时解决方案;把三层体系结构的方案几乎“无痛苦”的移植到n层体系结构是可行的。不过,你要认识到,拥有大量用户的三层体系的CMS系统很可能会超负荷的。
小结
现在你应该基本理解这两种主要用于CMS的体系结构。同时,你也应该可以科学的评估你应该使用哪一种体系结构。