三层体系结构与数据库编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三层体系结构与数据库编程
接要本文主要介绍了基于三层体系结构的网络数据库设计,并结合面向对象,分布式数据库开发等理论。全文围绕一个典型而简单的例子,通过VB编程语言,从分析、建模、设计、编码等各个角度对三层体系与数据库进行了全面而详细的阐述,文中提供了全部源代码。关键词三层体系数据库面向对象分布式开发
1. 三层体系结构
我们经常会看到许多应聘者在简历上写着“精通数据库编程”的字样,也经常会在招聘网站上看到软件公司的招聘要求中某一项为“精通数据库编程”。于是这些应聘者去这些软件公司面试,于是我们看到了许多“精通”者落选的现象。
一些程序员在设计数据库应用时,通常会采用数据控件绑定的方法实现。用鼠标拉几个控件,再用鼠标设置几个属性,连键盘都不用动,就完成了一个数据库应用的开发!当然,这的确是一种快速的数据库应用开发方式,但快速并不意味着精通。
对于大型的数据库应用系统,或是拥有众多客户端的应用系统,我们需要另外一种“精通”,这就是几乎每个程序员都听说过的“三层体系结构”。
1.1. 传统的C/S模式
在传统的数据库应用体系中,客户端与数据库完全分开,在客户端上运行了大部分服务,如数据访问规则、业务规则、合法性校验等等。每一个客户端都存在数据引擎,并且每个客户端与数据库服务器建立独立的数据库连接(DB Connection)。
基于该种体系的数据库应用系统的优势:开发周期较短,能够适应大部分中小型数据库应用系统的要求(当客户端数量少于50时)。
但是,随着数据库应用的日渐发展、数据容量的不断增加、客户端数量的不断增加,该种体系结构显示出了诸多缺陷,主要体现在以下几个方面:
1、可扩充性:对于数据库服务器端,每当建立一个数据连接,就会占用大量的系
统资源,当数据连接达到一定数量(如20个)时,数据库服务器的响应速度与
处理速度将大打折扣。
2、可维护性:基于传统C/S的数据库应用系统,业务规则通常置于客户端应用程
序中。如果业务规则一旦发生变化(随便举个例子,如身份证号码有可能升为
19位)时,我们就必须修改客户端应用程序,并且将每个客户端进行相应的升
级工作。
3、可重用性:采用传统C/S的设计模式时,数据库访问、业务规则等都固化在客
户端应用程序中。如果客户另外提出了B/S的应用需求,则需要在WEB服务
器中重新进行数据库访问、业务规则、合法性校验等编码(例如将数据库访问
写入ASP代码),而所做的工作与客户端应用程序中的功能完全重复,从而加
大了工作量,又使得程序开发者心里感到极不舒服。
正因为以上的诸多缺陷,使得三层(多层)体系结构成为目前数据库应用开发的首选,甚至客户有时也会提出该种技术需求。
1.2. 三层体系结构
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。
三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。
这样的好处显而易见:
1、由于数据访问是通过中间层进行的,因此客户端不再与数据库直接建立数据连
接。也就是说,建立在数据库服务器上的连接数量将大大减少。例如一个500
个客户端的应用系统,500个客户端分别与中间层服务器建立DCOM连接,而
DCOM通讯所占用的系统资源极为有限,并且是动态建立与释放连接,因此客
户端数量将不再受到限制。同时,中间层与数据库服务器之间的数据连接通过
“连接池”进行连接数量的控制,动态分配与释放数据连接,因此数据连接的
数量将远远小于客户端数量。
2、可维护性得以提高。因为业务规则、合法性校验存在于中间层,因此当业务规
则发生改变时,只需更改中间层服务器上的某个组件(如某个DLL文件),而
客户端应用程序不需做任何处理,有些时候,甚至不必修改中间层组件,只需
要修改数据库中的某个存储过程就可以了。
3、良好的可重用性。同样,如果需要开发B/S应用,则不必要重新进行数据访问、
业务规则等的开发,可以直接在WEB服务器端调用现有的中间层(如可以采
用基于IIS的WebClass开发,或直接编写ASP代码)。
4、事务处理更加灵活,可以在数据库端、组件层、MTS(或COM+)管理器中进
行事务处理。
如果现在你仍然感到不理解,没关系,请看下面的例子。
2. 简单的人事管理系统
下面以一个极为简单的人事管理系统为例详细讲述如何实现三层体系结构。编程语言为Visual Basic 6.0。
为了全面介绍程序设计方法,VB代码中采用了不同的方法实现相同的功能,如数据库访问中,同时采用了存储过程与ADO连接。读者可自行选择最适合的方法。
由于在代码中加入了大量注释,因此不再过多地说明函数功能与原理。
在团队开发中,代码中注释部分应占整个代码的1/3左右,而且应在代码编写前就写好注释。如果另一个程序员认为你的代码中注释全部是废话,那么这些注释肯定是在写完代码之后才加上去的!
2.1. 需求
简单的部门/人员管理系统,要求:
1、部门的属性有部门名称,人员的属性有姓名、年龄、性别;
2、 部门存在上下级关系;
3、 人员必须属于一个部门;
4、 人员、部门需要实现增加、删除、修改功能
5、 可以按人员的名称、年龄查询人员
6、 如果一个部门存在人员,或存在下级部门,则该部门不可删除 以上即为系统的简单需求。
2.2. 数据库
数据库采用SQL Server 7设计,数据库名称为“TEST ”,存在两个数据表(此处假设读者已掌握数据库设计,因为这个数据库实在太简单了)。
表tDept
字段名称 类型 nID
Int
DeptName Char(50) SuperID Int tEmployee 字段名称 类型 nID Int DeptID
Int EmpName Char(10) EmpAge Smallint EmpGender Bit
其中,tDept 中nID 与SuperID 为表内关联。
2.3. 中间层
打开VB6,选择“新建ActiveX DLL ”,并引用ADO 2.5。
新添加一个模块,命名为mdlPublic ,新填加5个类,分别命名为cDept 、cEmp 、cDepts 、cEmps 、cPublic 。其中,cEmps 与cDepts 分别为cEmp 与cDept 的集合类,cPublic 为定义枚举的类,无实际意义。将工程的启动模块设为“Sub Main ”(重要!)。
在SQL Server 的TEST 库中,添加一个存储过程AddDept 。 全部代码如下: