VB三层结构设计示例
vb实现三层结构及Wcf的入门实例(.net)
网上用来写三层结构和Wcf的实例不多,本人最近因为工作需要,简单学习了三层结构和Wcf服务,这里用 (vs 2010)作一个简单实例,希望能帮助一些需要的人快速入门。
网上关于三层结构和Wcf的解释都太专业和高大上,这往往会初学者带来困难。
这里用一些个人的理解作一些粗浅说明,各位配合下面的例子写出自己的代码后,再返回去看他们的专业定义,也许会更容易理解些。
所谓三层结构,按我的理解,就是把一个软件的开发,分成三块,一块专门作界面,一块专门作业务流程,一块专门作数据操作。
这在团队开发中非常有用,可以分工合作,一人作一部分,将来出错也好查错,维护起来也方便,特别是系统庞大了以后,作用更明显。
当然,如果是个人作个小软件,个人觉得什么界面、业务、数据还是放在一起吧,分层浪费的时间更多。
所谓的Wcf,我的简单理解就是为了实现三层结构中的数据层。
就是作一个数据操作的DLL,然后在网上发布这个DLL,别人调用这个DLL中的函数来实现功能,而不用管DLL是怎么写的。
那为什么不直接在自己的代码中写呢,而是要发布Dll到网上呢?答案是为了数据安全。
比如你要调用sql server中的数据库,客户端中如果使用了连接的用户名和密码,别人可以简简单单挂个小程序就把你的用户名、密码就截获了;而使用了wcf,数据库连接语句都是在服务器上进行,客户端只获得了返回的结果,显然就安全多了(平时我们浏览网页也是这种模式),还有一个好处就是如果这个数据的逻辑发生变化,更新服务器的DLL 文件就好,不需要再更新客户端了,比如某个算法,由原来的X*0.2调整为X*0.3,这个时候你也要客户端和你一起更新?这显然不经济。
当然如果你是作单机版的软件,在本机上运行的,就没有必要学wcf了。
下面会讲到Wcf的建立和在IIS 5.1上的发布,大家慢慢往下看。
以下的图例就不再作详细的文字描述了。
一、打开vs 2010,新建一个解决方案,名字为test,存在e:\mytest下二、左上角菜单->文件->添加->新建项目->windows->windows窗体应用程序,名称:界面层四、左上角菜单->文件->添加->新建项目->Wcf->Wcf服务库,名称:数据层。
三层架构及实例演示
三层架构及实例演示简述通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问(DAL)。
实例 登录界面这是一个经过改版的登录,视频里的用c#来实现的。
使用的工具:sql server 2010 、vs 2010建立数据库:Login 表:Scores、UsersScore表Users表LoginModel(实体层)创建实体层LoginModel,建立Userinfo类,存储从UI返回的数据。
这里我们称为业务实体层,因为他也是为业务逻辑服务的。
[vb] view plaincopyprint?Public Class UserInfoPrivate _ID As StringPrivate _Username As StringPrivate _Password As StringPrivate _Email As StringPublic Property ID As IntegerGetReturn _IDEnd GetSet(ByVal value As Integer)_ID = valueEnd SetEnd PropertyPublic Property Username As StringGetReturn _UsernameEnd GetSet(ByVal value As String)_Username = valueEnd SetEnd PropertyPublic Property Password As StringGetReturn _PasswordEnd GetSet(ByVal value As String)_Password = valueEnd SetEnd PropertyPublic Property Email As StringGetReturn _EmailEnd GetSet(ByVal value As String)_Email = valueEnd SetEnd PropertyEnd ClassLoginBLL(业务逻辑层)UI层调用业务逻辑层来执行登录的操作。
VB程序实现算法三种基本结构课件
Do Until循环
在不满足条件的情况下重复执行一组语句。
编写高效程序
掌握VB程序实现算法三种基本结构的方法,能够编写高效、可读性强的程序, 提高解决实际问入
从用户获取输入数据。
2
计算
对输入的数据进行计算和处理。
3
输出
将计算结果输出给用户。
选择结构示例
If语句
根据条件执行不同的语句块。
Select Case语句
根据不同的情况执行相应的语句块。
循环结构示例
For循环
根据循环次数执行一组语句。
Do While循环
在满足条件的情况下重复执行一组语句。
VB程序实现算法三种基本结构 课件
顺序结构
VB中,顺序结构是指程序从上到下依次执行每个语句的结构。我们可以使用注释、变量、常量、运算符等来 实现顺序结构。
选择结构
选择结构是根据条件执行不同语句的结构。在VB中,我们可以使用If语句、 Select Case语句等来实现选择结构。
循环结构
循环结构是执行一组语句多次的结构。VB提供了多种循环结构,例如For循环、 Do While循环等。
vb结构化程序设计的三种基本结构
vb结构化程序设计的三种基本结构1.引言1.1 概述概述部分将介绍VB结构化程序设计及其重要性。
VB(Visual Basic)是一种面向对象的程序设计语言,它强调程序的结构化和模块化,以便于代码的可读性和维护性。
VB结构化程序设计通过组织程序代码以一种逻辑和有序的方式,使程序更加易于理解、调试和修改。
在VB结构化程序设计中,有三种基本结构,即顺序结构、选择结构和循环结构。
这些基本结构的正确使用可以使程序具备更好的可控性和灵活性,使其能够适应各种复杂的应用场景。
顺序结构是指程序按照代码的排列顺序依次执行,没有任何条件判断或循环。
顺序结构使得程序的逻辑清晰明了,易于理解。
通过合理地安排程序的执行顺序,可以确保程序按照我们所期望的方式执行。
选择结构允许根据条件的判断来决定程序的执行路径。
根据条件的不同,程序可以选择执行不同的代码块。
选择结构使得程序具有决策能力,可以根据具体条件来作出不同的处理。
循环结构允许程序根据条件的判断来重复执行某段代码。
循环结构使得程序可以重复执行一些特定的操作,节省了代码量,并提高了程序的效率。
本文将重点介绍这三种基本结构的原理和使用方法,并提供一些示例代码来帮助读者更好地理解和使用VB结构化程序设计。
通过学习和掌握这些基本结构,读者将能够编写出更加清晰、可读性更高、可维护性更好的代码,提高程序的质量和效率。
1.2 文章结构文章结构部分的内容应该包括对整篇文章的组织和框架进行介绍。
下面是对文章结构内容可能的写法:在本篇文章中,我们将讨论VB结构化程序设计的三种基本结构。
为了使读者更好地理解这些基本结构,本文将按照以下结构组织:第一部分为引言,包括对整篇文章的概述、文章结构和目的进行介绍。
在概述部分,我们将简单介绍VB结构化程序设计的概念和重要性。
文章结构部分将解释本文的整体组织框架,并说明每个章节的主要内容。
目的部分将说明本文的写作目的和预期的读者受众。
第二部分为正文,将分别介绍VB结构化程序设计的三种基本结构。
vb程序设计的3种基本结构
例4.1算法的描述
例4.1 输入三个数,然后输出其中最大的数。 将三个数依次输入到变量A、B、C中,设变量MAX存放 最大数。其算法如下: 1) 输入A、B、C。 2) A与B中大的一个放入MAX中。 3) 把C与MAX中大的一个放入MAX中。 4) 输出MAX,MAX即为最大数。
例4.2 算法的描述2
伪代码示例
例如:例4.1可用如下的伪代码表示
Begin(算法开始)
输入 A,B,C IF A>B 则
A→Max
否则 IF C>Max Print Max B→Max 则 C→Max
End (算法结束)
二 用传统流程图表示算法
1、传统流程图中的基本符号
起止框 I/O框 判断框
处理框
流程线
连接点
2、三种基本结构的表示
S2
S3
i=1 当i<=100 N xi≠0 打印xi i=i+1 Y
示例2
输入100个数存入 X1,x2,……x100 让x1,……x100中的 非素变为0 打印x1…..x100中 不等于0的数 S1 i=1 当i<=100
判断xi是否是素数, 若不是则将xi=0
S21
S2 S3
i=i+1 j=2
直到j>xi/2
xi=0
Y
i=i+1 i=1
当i<=100
细化后的流程图
N
xi≠0
打印xi
Y
i=i+1
4.2 顺序结构 4.2.1 赋值语句
形式: 变量名=表达式 对象.属性=表达式 功能: 将表达式的值赋值给变量名或指定对象的属性。 一般用于给变量赋值或对控件设定属性值. 例: sRate!=0.1 Text1.Text = "欢迎使用Visual Basic 6.0” 说明: 1 执行过程:先求表达式的值,然后将值赋值给左边的变量。 2 右边的表达式可以是变量、常量、函数调用等特殊的表达式。 3 不要将“=”理解为数学上的等号: A=A+1 是表示将A单元的值加1后以放回到A单元。
VB三种程序结构VisualBasic语言作为结构化程序设计语言提供
3、
当逻辑型赋值给数值型时,True转换为-1,False转
换为0;反之,当数值型赋给逻辑型时,非0转换为True,
0转换为False.
2、MsgBox函数:向用户显示信息(输出
MsgBox语句: MsgBox (提示内容 [,答复按钮+图标][,标题]) MsgBox函数: Dim x As Integer X=MsgBox(提示内容 [,答复按钮+图标][,标题])
? Round(3.89456,3) 结果:3.895 说明:☆ 在三角函数中,以弧度表示;sqr的自变量不能是负数
☆ Rnd函数返回小于1,大于等于0的单精度随机数。 VB用于产生随机数的公式取决于称为种子(seed)的初始值。
默认情况下,每次运行一个应用程序,VB提供一相同的种子, 即Rnd产生相同序列的随机数。为了每次运行时,产生不同序 列的随机数,可执行Randomize语句,格式如下:
•答复按钮+图标:确定在消息框中按钮 的数目和类型,以及图标的类型。
•标题:显示在消息框标题栏上的文本。
"按钮"设置值及意义
分组 内部常数
VbOkOnly VbOkCancel 按 VbAboutRetryIgnore 钮 VbYesNoCancel 数 VbYesNo 目 VbRetryCancel
对 象 可 以 是 窗 体 ( Form ) 、 图 形 框 (PictureBox) 或 打 印 机 (Printer)。如果省略了对象,则在窗体上输出。 说明:① 表达式:可选项。可以是一个或多个表达式。当有多个表达式 时,要用分隔符(逗号、分号)隔开。当表达式缺省时,则屏幕显 示一个空行。 ② 输出格式分为标准输出格式和紧凑输出格式。 标准输出格式:以14个字符宽度划分为一个区段,每个数据项占一个区 段的位置。(数据项之间用逗号隔开) 紧凑输出格式:对于数值型数据,前面有一个符号位,后面有一个空格; 对于每个字符串,各个数据项之间没有间隔。(各数据项之间用分 号或空格作为分隔符)
vb程序的三种基本结构
Select Case x Case 90 to 100 Print "优秀" Case 80 to 89 Print "良好" Case 70 to 79 Print "中等" Case 60 to 69 Print "及格" Case Else Print "不及格"
End Select
精选ppt
End If
精选ppt
10
选择结构
例:输入一学生成绩,评定其等级。规则是:90~100分为 “优秀”,80~89分为“良好”,70~79分为“中等”,60~69 分为“及格”,60分以下为“不合格”
使用IF语句实现的程序段如下:
If x>=90 then Print "优秀"
ElseIf x>=80 Then Print "良好"
13
综合练习:输入a,b,c求一元二次方程组的根。
Private Sub Command1_Click()
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
If a = 0 Then
MsgBox "error!"
End
End If
d=b^2-4*a*c
▪ 根据不同的条件判断来决定程 序执行走向的结构。
精选ppt
3
(3)循环结构
a) 当型循环
b) 直到型循环
条件 N
Y 语句组
语句组
Y 条件 N
(b)
▪ 根据条件判断某些语句可能需
( a ) 要执行0次1次或多次的结构。
高中信息技术vb的三种基本结构
例4、s=0
for I=1 to 100 s=s+I
1+2+3+4+…… +100
next
最后,变量s的值是〔5050 〕
例5、 n = 0:s=0 for x=3 to 11 step 2 n=n+1 s=s+x next x 那么最终变量n、s的值是〔n=5 s=35
1. n=1 s=3 2. n=2 s=8 3. n=3 s=15 4. n=4 s=24 5. n=5 s=35 〕
是 ② ,属于循环构造的是 ③④ .+1 x=x+y-1
A. l B. 3 C. 5 D. 7 3、以下程序,运行后变量value的值为 ( ) X = 20 If x >= 10 then value = 5 * x else value = 4 * x end if msgbox(value) 最后,变量value的值是〔 C〕 A、50 B、40 C、100 D、80
三、课堂稳固: 1、有以下程序段:
①. I = 3
J=5 I=I+J
②. J = 0 For I = l To 5
J=J十1 Next
③. j = 0
④. J = 0
If J>0 Then
If J>0 Then
J=J+1
J=J+l
Endif
Else
J=J-1
Endif 以上四个程序段中,属于顺序构造的是 ① ,属于分支构造的
4、以下程序,运行后 X的值为 〔C〕
X =2 For i=1 To 5 If X<i Then
X= X+i
End If
Next i
A. l B. 3 C. 5 D. 7
VB的基本控制结构
顺序结构是一种线性结构,也是程序设计中最简单、
最常用的基本结构。它在程序运行过程中,按照语 句出现的顺序从上到下依此执行。顺序结构流程图 如下图所示,先执行语句A,再执行语句B。
顺序结构中主要的语句是赋值语句,通过赋值语句, 可以在程序中改变变量的值,或改变对象属性值。 其语法格式为:
[Let]变量=表达式 [Let]对象.属性=表达式
其中表达式中可以包含变量、常量、属性。此时等 号称为赋值等号。例如:
Dim A As String
A=Text1.Text Label1.Caption=A
说明:
(1)赋值语句兼有计算和赋值双重功能。
(2)“=”是赋值等号,与数学上的等号意义不同。
(3)赋值等号两边的数据类型通常要求一致,但VB 提供的对某些数据类型的自动转换机制,可强制变 量转换为适当的数据类型。例如,当逻辑型赋值给 数值型时,True转换为 -1,False转换为0;反之, 非0转换为True,0转换为False;
程序代码: Dim I%, s % FFoorrI I==10ToTo101steSpte1p -
1 s=s+I
Next I
Print I, s
循环体的执行次数是多少 ? 输出的I、S的值是多少 ?
For I = 1 To 10执行多少次?
例1:求1+2+3+4+ …+10之和. 分析: •重复过程(循环体): + •初值、终值和增量:1、10、1 Dim I, s As Integer
EEnnddsseelelecctt
例7 编写一个加油站计费程序
在“种类”中选择油品种类,界面上的说明文字将随之 改变,并将“数量”文本框设为焦点;在数量文本框中输入 需购的油品数量后,单击“计算”按钮,在“总价”文本框 显示所购油品种类应付的金额。已知汽油单价:
VB编程序的基本结构
Select Case ch Case "a" To "z", MsgBox (ch + Case "0" To "9" MsgBox (ch & Case Else MsgBox (ch + End Select
"A" To "Z" "是字母字符") "是数字字符") "是其他字符")
Select语句举例
•
dim
n% ‘执行后,n的值为多少?
n=7 n = n + 1
本书目录
5
3.1.2 用户交互函数
为了便于应用程序与用户之间进行信息交互, 完成信息的输入和输出,用户可采用文本框、标签 等控件来实现,也可用提供的InputBox、 MsgBox来实现。 InputBox的功能是等待并提示用户为程序运行 输入指定的数据,简称“输入对话框”。 MsgBox的功能是进行提示,用以确认某种程 序的操作,简称“消息框”。
注意: • 变量的类型或表达式的结果 必须为数值或字符串。 • 对于多个变量进行条件判断 时,不能使用select case语句, 只能使用IF 语句
表达式列表 i 必须与 “变量或表达式”的类型相同 1.表达式 例: “A“ 2.表达式1 To 例:60 To 100 3. Is 例: 5 表达式2
多分支结构举例
语法格式: If 表达式1 Then
… ElseIf 表达式n Then [Else
语句块1 ElseIf 表达式2 Then 语句块2 语句块n
End If
语句块n+1]
注: ElseIf 不能写成 Else If
程序设计三种基本结构
程序设计三种基本结构在Visual Basic 程序设计语言中,提供了以下三种基本的控制结构:其对应的结流程图如下所示:顺序结构分支结构循环结构顺序顺序结构是按语句的先后次序依次执行的控制结构,其中“执行A”和“执行B”可以是一个语句也可以是一组语句。
在VB中录制的宏都是顺序结构的语句。
例如,以下程序段的控制结构就属于顺序结构:a=1b=a+1c=a+b例1:以下是一段Visual Basic宏程序,运行后变量x的值为x=2y=3y=y+1x=x+y-1选择分支结构又称为选择结构。
根据条件判断其是否成立,从而选择程序执行的方向,执行其中的一个分支。
分支结构的语法结构如下:语法1语法2If 条件 Then语句End If If 条件 Then语句1 Else语句2 End If例2:以下是一段Visual Basic宏程序,运行后变量a的值为a=10If a<10 Thena=a+1Elsea=a-1End If循环循环结构是根据条件判断是否成立,如果条件成立则重复执行循环结构中某语句序列功能,直到条件不成立为止,最后退出循环结构。
其中For…Next语句的语法定义如下:(详见书本第137页)For counter=start To end [Step step][statements]Next [counter]说明:counter必要参数,用作循环计数器的数值变量start必要参数,counter的初值end必要参数,counter的终值Step可选参数,counter的步长。
如果没有指定,step默认的值为1例3:以下是一段Visual Basic宏程序,运行后变量m的值为m=0For i=1 To 3m=m+2Next i。
三部分VB的程序结构基础PPT课件
2、“表达式表”是一个或多个表达式,可为数 值表达式(求出表达式的值输出)或字符串(原 样输出)。若省略,则输出一空行。 3、多个表达式之间可以用以下分隔符隔开:
Dim x As Integer, y As Integer
4.保留行号与标号
VB源程序也接受行号与标号,但这不是必须的。标号是以字母 开始而以冒号结束的字符串,一般用在转向语句中。对于结构 化程序设计方法,应限制转向语句的使用。
现代教育技术中心
VB编程风格(编 码 规 则)
例如,下面是一段代码的书写:
Rem This is example '注释 Dim x As Integer, y As Integer, _ z As Integer '续行符 x = 15: y = 10 ‘一行多语句 z = (x + y) / 2
现代教育技术中心
2、Spc(n)
使光标从当前位置跳过n个空格,对输出进行定位。 比较: Print Tab(2);“Hello”;Tab(10);”world” Print Spc(2);”Hello”;Spc(10);”world” 3、Format[$](数值表达式,格式字符串)
例如: Private Sub Command1_Click() Print Format$(348.52,"$###.00"),Format(Now,"hh:mm AM/PM") Print Format$(1348.52,"$0,000.00"),Format(Now,"ttttt") Print Format$(0.52,"##%"),Format(0.05,"00%") End Sub
VB顺序结构程序设计
第十五页,共45页。
【例4-2】设计如下图所示的界面,运行时,输入某 学生三门课的成绩,计算平均成绩。按要求编程。
Text1
Text2 设Text4的
Text3
Locked 属性为True
Text4
Command1
Command3
Command2
要求: 单击“计算”按钮求平均成绩;
Text4.Text = (A + B + C) / 3
End Sub
第十七页,共45页。
②当输入成绩的文本框获得焦点时,选中其中的文本
Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub
Private Sub Text2_GotFocus() Text2.SelStart = 0
Text2.SelLength = Len(Text2.Text)
End Sub Private Sub Text3_GotFocus()
Text3.SelStart = 0
Text3.SelLength = Len(Text3.Text) End Sub
4.2 数据输入
把要加工的初始数据从某种外部设备(例如键盘) 输入到计算机中,并把处理结果输出到指定设备 (如显示器),这是程序设计语言所应具备的基本 部分。
输入
赋值语句; 输入框(InputBox); 文本框(TextBox); ……
第七页,共45页。
4.2.1 用输入框(InputBox)输入数据 1. InputBox函数的格式
X = 3 ^ 5: Y = 7 ^ 4
B-S三层式架构
B/S三层工架构模型1. 概述简单介绍应用程序编程模型的发展过程,以及我们常用的几种应用程序编程模型。
通过对多个模型的表述加深人们对编程模型的概念,为下面进一步描述Web应用模型打下基础,2. 应用程序的基本功能单元组成应用程序的功能代码及其资源,按照其在应用程序中的功能,可以简单分解成为三个部分:用户界面(User Interface),事务逻辑(Business Logic)和数据存取(Data Access)。
应用程序的基本功能单元如图1所示。
图1、应用程序功能分解3. 几种典型的编程模型随着计算机技术的发展和应用的深入,应用程序的编程模型在不断的演化,先后出现了:单层应用模型(monolithic);两层客户/服务器应用模型(two-tier client/server);多层应用模型(multitier client/server); 分布式系统;基于Web的多层应用模型(web-based multitier client/server)。
▪单层应用模型早期为大型机编写的应用程序,没有将应用程序三个组成部分分开,即没有将用户界面、事务逻辑和数据存取分开。
这种体系结构跟当时的计算机水平和应用状况有一定的联系,当时的用户通过哑终端来共享大型机资源,哑终端没有任何处理能力,所有的用户界面、事务逻辑和数据存取功能都是在大型机上实现,这样当时使用单层体系结构而没有出现多层体系结构是合理的。
单层的应用程序结构见图2所示。
图2、单层的应用程序模型▪两层客户/服务器应用模型PC机的出现对应用程序模型的发展带来了巨大的推动力,这时出现了客户服务器模式的应用程序,即应用程序的代码和资源被明确的划分为客户端和服务器端。
因为PC机有了一定的处理能力,传统在大型机上实现的的用户界面和部分事务逻辑被移到PC机上运行(我们将这种PC 机端的代码称为应用程序客户端),而大型机则提供部分事务逻辑处理和数据存取的功能(我们将这种大型机端的代码称为应用程序服务器端)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈如何建立三层体系结构的ASP应用程序随着互连网应用的深入和发展,三层体系结构的应用模式也得到更多人的青睐。
本文介绍了三层结构应用程序的概念和优点,并结合一个实例介绍了如何建立三层结构的ASP应用程序。
一、两层结构的ASP应用有何缺点在Browser/Server 应用程序开发领域,微软公司的IIS/ASP以其强大的功能,良好的扩展能力,及与其它微软产品的一致性,迅速地流行起来。
它能使一个具有VB/VC经验的程序员,很快地成为一个Web程序员,开发出看上去非常专业的应用。
但是,ASP有一个天生的缺点,就是ASP代码和HTML代码是混在一起的,ASP程序员既需要考虑与数据库打交道,需要关心如何与HTML配合,有时还需要用ASP直接生成HTML代码。
其结果是,当程序逻辑足够复杂时,.asp源文件非常长;而且,无论客户提出用户界面的改变,还是商业逻辑的改变(比如,在考试系统中,"合格"的标准可能从达到60分就算合格,改为进入前100名才算合格),都需要对.asp文件进行改动,而商业逻辑的改变,很可能需要改动很多文件。
二、三层结构的概念在传统的Client / Server应用中,也存在着上述同样的问题,多层结构的应用正是在对C/S 结构的总结基础上产生的,并且也已经扩展到了B/S应用开发领域。
即将应用划分为三层(可以有更多层,但三层最常见): 用户界面层,商业逻辑层,数据库层。
用户界面层负责处理用户的输入和向用户的输出,但并不负责解释其含义(出于效率的考虑,它可能在向上传输用户输入前进行合法性验证),这一层通常用前端工具(VB,VC,ASP等)开发;商业逻辑层是上下两层的纽带,它建立实际的数据库连接,根据用户的请求生成SQL语句检索或更新数据库,并把结果返回给客户端,这一层通常以动态链接库的形式存在并注册到服务器的注册簿(Registry)中,它与客户端通讯的接口符合某一特定的组件标准(如COM,CORBA),可以用任何支持这种标准的工具开发;数据库层负责实际的数据存储和检索。
有了这样的结构,上面的问题迎刃而解:还是以考试系统中的合格标准为例,在客户端所有需要显示合格人员名单的地方,调用这样一个函数GetQualifiedList,至于这个函数如何编写,如何与数据库打交道,以至访问的是何种数据库都与其无关(你一定有过这样的经历,在一种数据库系统上运行得很好的SQL语句,有时换到另一种数据库系统上必须加以修改); 在中间层DLL中实现这个GetQualifiedList函数,如果用户对"合格"的定义变了,只需要修改这个函数就可以了,只要此函数的入口参数和返回内容不变,在客户端不需作任何改动。
在这里,我们看到了面向对象编程的特性之一封装性的优点,而这一点在开发大型应用时尤其有用--我们可以把开发人员分成两组,一组负责开发界面层,另一组负责开发商业逻辑层,双方只要按照事先商定的函数接口,并行地开发就可以,而不必向从前那样,后面的工作必须等前面的工作完成后才能开始。
当然,这样的开发模式需要很好的项目协调和文档作支持。
你也许会问,如果我把这些函数些在一个单独的文件中,再在需要调用的地方把它包含进来,不是同样能达到目的吗? 第一,这种方法效率不高,无论你把这些函数分散到多少个文件中,当你需要调用其中一个时,总会包含进一些实际上并不需要的函数,这无疑加重了服务器的负担,对服务器性能要求较高的Web应用尤其如此。
而DLL只在需要时才调入内存且只调入需要的函数,并且多个应用程序实例可以共享同一个DLL实例;第二,设想一个员工,有20个属性(工号,姓名,年龄,性别......),现在给定某工号,要求返回此员工所有信息。
此时如果单纯用函数,只能定义20个全局变量,在函数中改变这些变量值,或者定义一个有20个传参(by reference)参数的函数。
显然,第一种方法很麻烦而一旦增加一个属性后一种方法就需要更改函数接口。
而在一个对象里,既包含成员方法(即函数和过程),也包括成员属性。
如果我们采用对象的方法,则在函数中只需要改变对象的属性,在函数外可以直接引用改变了的对象属性值。
这种方法有些类似第一种方法,但1.属性值无需在函数外逐一说明;2.这些属性值只属于对象,与对象无关的代码不会无意地改变属性值;3.一旦对象被释放,这些值会被一起释放。
三、如何开发三层结构的ASP应用程序ASP具有良好的扩充性,我们访问数据库时,采用的时ADO对象,访问文件时,采用的是文件系统对象(FSO),其实这时程序已经是三层结构的应用程序了,只不过由于是利用内置的对象而为意识到罢了。
这些对象都遵循COM/ActiveX接口,因此我们自己开发的对象也要遵循这个接口。
下面,我们就以上文提到的"合格"标准为例,演示如何创建自己的三层结构的ASP应用。
1、在数据库系统中建立如下数据库表:Employee: EMPLID char (5) not null,Name char (10) not null,Gender char (1) not null,Score int not null此表存储员工信息和考试成绩,为简单起见,这里只包含工号,姓名和性别三项,并且只有一门考试,EMPLID为主键。
2、建立动态链接库启动VB(这里以VB为例,你可以用你喜欢的任何支持ActiveX接口的开发工具开发),新建一工程,工程类型为ActiveX DLL。
在工程中新建一个类,取名为Employee。
你可以Class Builder可视化的向类中填加属性和方法,也可以直接手工编辑。
首先填加EMPLID属性如下:Private msEMPLID as stringProperty Let EMPLID(sEMPLID as string)msEMPLID=sEMPLIDEnd PropertyProperty Get EMPLID() as stringEMPLID=msEMPLIDEnd Property一般地讲,每一个属性都应该有Property Let和Property Get两个方法,它们分别当向属性赋值和读取属性值时被调用。
如果某个属性只被赋值而从不被读取(这种情况多发生在对应数据库表的主键的属性上),则Property Get方法可以省略。
Property Let方法不能省略。
你可以仿照上面的程序再建立Name,Gender和Score三个属性。
然后创建如下方法:Public Sub Create(EMPLID as string)dim conn as new Connectiondim rs as new Recordsetdim sql as string'Suppose that you create a DSN in the control panel, the connectionstring property'can also be dsn-less stringconn.ConnectionString="dsn=dsnname;uid=username;password=pwd"conn.opensql="select * from Employee where EMPLID='" & EMPLID & "'"with rs.open sql,conn,1,3if .eof and .bof thenexit subelsemsEMPLID=trim(.Fields("EMPLID"))msName=trim(.Fields("Name"))msGender=trim(.Fields("Gender"))msScore=.Fields("Score")end if.closeend withset rs=nothingconn.closeset conn=nothingEnd Sub这里根据EMPLID创建Employee对象,注意数据库中的值是赋给三个私有变量,而不是直接赋值给属性,如果你单步调试就会发现,给msEMPLID赋值会调用Property Let EMPLID,也就是给属性赋值。
下面我们再创建一个类Employees,并填加如下方法:private colQualifiedList as new Collectionprivate mnCurrentIndex as integerPublic Sub GetQualifiedList()dim conn as new Connectiondim rs as new Recordsetdim sql as string'Suppose that you create a DSN in the control panel, the connectionstring property'can also be dsn-less stringconn.ConnectionString="dsn=dsnname;uid=username;password=pwd"conn.opensql="select EMPLID from Employee where Score>=60 order by Score desc"with rs.open sql,conn,1,3if .eof and .bof thenexit subelsedo while not .eofdim oEmployee as new EmployeeoEmployee.Create trim(.Fields("EMPLID"))colQualifiedList.Add oEmployeeset oEmployee=nothingloopend if.closeend withset rs=nothingconn.closeset conn=nothingEnd Sub首先请注意VB中创建类实例的语法dim oEmployee as new Employee,后面会看到,在ASP中创建类实例的语法是不同的。
这个方法检索成绩大于等于60的员工工号,并据此创建一个Employee对象,再将此对象加入私有的集合对象中。
下面两个函数遍历集合中的元素: Public Function GetFirst() as Employeeif colQualifiedList.count>0 thenmnCurrentIndex=1set GetFirst=colQualifiedList.Item(1)elseset GetFirst=nothingend ifEnd FunctionPublic Function GetNext() as EmployeemnCurrentIndex=mnCurrentIndex+1if mnCurrentIndex>colQualifiedList.count thenset GetNext=nothingelseset GetNext=colQualifiedList.Item(mnCurrentIndex)End ifEnd Function也许你会说,为何不把集合声明Public,这样在ASP中不是可以直接引用吗?确实,这样也行得通,编程实现起来也更简单些,但是,这样做破坏了封装性原则。