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