动态网站制作指南



当前位置 > 网站建设学院 > 网络编程 > ASP技巧 Rss
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket

组件对象开发Web应用的实例分析


发表日期:2000-4-21


(转载计算机世界)
夏长虹 童亮 陈文博
一. 应用实例的分析与开发

---- 我们以学籍管理系统为背景,基于Windows DNA的思想,开发了一套应用系统。在该系统中,有关教务学籍的事务逻辑都是由定制COM组件来处理的,动态Web页面通过asp脚本调用这些组件。系统在开发速度和软件质量等方面都优于不用COM组件而仅用ASP脚本的方案。为说明问题,我们通过一个定制组件和ASP脚本的主要代码简单介绍局部功能的实现过程。

---- 在displayscore.asp页面中接受、辨别用户的查询请求,做出不同的查询处理。当客户的身份为教师或教务时,可以查询所有学生的成绩;当客户的身份为学生时,只能查询该生本人的成绩。

---- 定制COM组件Score.dll进行查询处理。首先设计该组件的接口,为组件设置四个属性: Subj(课程)、Term(课程所属学期)、Class(查询的班级)和Stu_No(查询学生的学号);定义两个方法:RequeryScores和RequeryAllScores,分别对教师、教务部门和学生的请求做出相应的处理,并将查询结果集返回给用户。

---- 以下是实现该组件Score.dll的部分关键代码。从中我们可以看到组件的接口是如何实现的:

Option Explicit
PRivate m_StuNo As Variant
Private m_Subj As String
Private m_Term As String
Private m_Class As String
  ' 设置属性为可写入的
Public Property Let StuNo(ByVal vNewValue As Variant)
m_StuNo = vNewValue
End Property
Public Property Let Subj(ByVal vNewValue As Variant)
m_Subj = vNewValue
End Property
......            
' 学生查询成绩请求处理
Public Function RequeryScores() As Object
Dim objContext As MTxAS.ObjectContext
Set objContext = GetObjectContext()
             ' 建立事务性组件
Dim ObjConn As ADODB.Connection
            ' 利用ADO访问数据库
Dim ObjRecordset As ADODB.Recordset
Set ObjConn = New ADODB.Connection
ObjConn.Open "xia", "sa", ""
Set ObjRecordset = New ADODB.Recordset
Dim query As String
' 根据查询要求(查询所有课程、查询特定学期的所有课程、
  查询指定课程、查询特定学期的某一课程)进行不同的查询操作
If (m_Subj = "all" And m_Term <> "all") Then
  query="select   Client_Name,Client.Client_No,Courses.subject,
         stu_score.score,stu_score.term,sub_type"
  query = query & " from client,stu_score,courses"
  query=query&"where client.client_no=stu_score.client_no
  and stu_score.subject=courses.subject
  and courses.term=stu_score.term
  and courses.term='" & m_Term & "'
  and Client.Client_no='" & m_StuNo & "'"
End If
......
ObjRecordset.Open query, ObjConn
         ' 进行数据库查询
ObjContext.SetComplte
             ' 若事务成功完成,则提交该事务
RequeryScoresExit:
Set RequeryScores = ObjRecordset
          ' 返回查询结果集
Exit Function
RequeryScoresErr:
Set RequeryScores=Nothing
           ' 事务失败处理
End Function
' 教师、教务查询成绩请求处理
Public Function RequeryAllScores() As Object
......
End Function
---- 在ASP页面displayscore.asp中引用组件,ASP代码如下(其中加粗的部分便是对该组件的调用):
< %@ LANGUAGE="VBSCRipT" % >
< HTML >
< HEAD >
< META NAME="GENERATOR" Content="Microsoft
Visual InterDev 1.0" >
< META HTTP-EQUIV="Content-Type"
content="text/html; charset=gb_2312-80" >
< TITLE >Show To Teacher< /TITLE >
< /HEAD >
< BODY background="images/bk.GIF" >
< %
  dim objResult
  set objResult=Server.CreateObject("Display.Score")
  dim Term,Subject
  Term=Cstr(Request.Form("Term"))
  Subject=Cstr(Request.Form("Subject"))
  objResult.term=Request.Form("term")
  objResult.Subj=RequestForm("Subject")
  objresult.class=Request.Form("Class")
  dim Scores
  set Scores=objResult.RequeryAllScores
  % >
' 以下代码为显示处理的结果
< div align="center" >< center >
......
< table border="0" cellpadding="0"
cellspacing="1" width="100" >< tr >
< %For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#004080" >
< strong >< font color="#FFFFFF" > < small >&nbsp;&nbsp;
< %=scores(I).Name% >< /font > < /strong >&nbsp;< /td >
< %NEXT
  Do While (Not Scores.EOF)% >
   < /tr >< tr >
     < % For I = 0 To Scores.Fields.Count - 1% >
        < td bgcolor="#ACE8F9" >< p align="center" >
        &nbsp;&nbsp;< %= Scores(I).Value% >< /td >
        < %Next
        Scores.MoveNext% >< /tr >
  < %Loop% >
< %Scores.close
       ' 关闭数据库连接
set Scores=Nothing
set objResult=Nothing % >
      ' 释放对象
< /table >< /center >< /div >
< /BODY >
< /HTML >
---- 可以想象,如果仅使用ASP脚本进行业务处理就会使ASP页面中代码十分臃肿、晦涩。而使用组件的方案也较单纯的ASP脚本执行速度速度快。并且可以将整个查询处理作为一个事务,保证数据库信息的安全、完整。将该组件在MTS中注册,又可避免多用户访问该主页时可能造成的网络拥塞。实际应用中,学生和教师的使用权限是不同的。在学生查询成绩的页面中,可重用该组件,只是调用其不同的接口而已。仅使用ASP脚本进行业务处理,则需重新编写与displayscore.asp类似的、同样烦琐的代码。在开发过程中,不同的开发人员可各尽所能,同时进行组件和ASP页面的设计,缩短了软件开发周期。
---- 以下两图显示的是教师(教务)查询成绩和显示查询结果的页面:

二. 开发过程中辅助工具的使用

---- 传统的软件工程进行的需求分析、数据库设计等都是人们“纯手工”完成的,缺乏严谨性和规范性。而在以组件为中心的系统分析和软件开发过程中,应力争使用有效的计算机辅助工具,以适应快速建模和组件方法新形势的需要,提高分析的质量及精度。

---- 有很多辅助工具可以利用。由于以组件为中心的系统分析过程仍保留着传统软件工程方法的脉络痕迹,北大青鸟的CASE工具对传统的软件工程方法比较有效,我们采用了这一工具。在数据库建模方面,我们选用了SYBASE 公司的S-Designer,可将数据库概念模型自动转化为物理模型。

---- 1. 利用青鸟CASE工具编写需求分析文档

---- 长久以来,人们已习惯于“纯手工”地进行需求分析。开发人员对现有系统和用户要求进行调查后,需要设计系统的数据流图(DFD图),编写小说明,设计系统的结构图(SC图)。但这种分析方法是不严谨的,由于种种原因,可能会发生加工、数据流、文件的语法定义错误;数据流图上下各层不一致;数据流图分解后的数据不平衡,或文件等重名及文档不完备等各种问题,影响了我们对用户需求的分析和理解,防碍了今后的工作。尤其是对组件的分析失当,后果不堪设想。

---- 青鸟CASE工具提供的即是一套支持软件工程中采用传统的结构化方法进行需求分析、软件设计的工具。由工具生成的每个文件即一个项目,每个项目均包括数据流图和模块结构图两部分:

数据流图部分辅助系统分析员完成对软件系统的需求分析、建立目标系统的需求模型、生成一份正确、完整的关于目标系统的说明文档;同时,提供对需求文档的查询、列表、分片、影响范围等分析功能,辅助软件设计人员对需求分析的结果文档进行深入、细致的分析和理解,以利于软件设计工作。

模块结构图部分辅助程序设计人员在需求分析阶段完成后对软件系统进行设计,支持模块的逐层细化,建立系统的软件体系结构,最后得到一份正确、完整的软件设计文档。同时,提供对设计文档进行查询、列表、分片、影响范围等分析功能,完成对设计的结果文档进行深入、细致的分析理解,以利于软件开发及维护工作。在SC图中组件的规划方案已见端倪,继续细化将得出每个组件的概要设计方案。
---- 在教务系统的实例中,利用青鸟CASE工具生成的DFD图和SC图如下图所示:
---- 系统1层DFD图 系统0层SC图

---- 2. 利用S-Designer进行数据库设计

---- 当完成系统的详细设计后,接下来便是数据库设计。数据库设计在整个软件工程中占有举足轻重的地位。数据库设计不合理,数据得不到合理、有效的存储,数据存在潜在的不一致性、不完整性或有大量冗余,都会降低系统性能,甚至使系统崩溃。

---- 手工的数据库设计完全依赖于设计者的设计水平。设计者首先必须根据实际需要建立若干个逻辑上存在的数据库表,并使其满足第三范式;而后根据它们之间的联系建立特定数据库表将其联系起来。这是一件相当烦琐的事。数据库设计者既要进行数据库的逻辑设计,又要将逻辑模型转成物理模型,而且设计出的数据库不一定能满足第三范式。合理的库表结构决定了访库组件接口的设计质量,所以原先数据库设计方式不适用于以组件对象为中心的软工设计。

---- 在教务系统的实例中,S-Designer使数据库设计变得轻松、简单起来。设计者只须根据现实需要,设计出数据库的E-R图,S-Designer会将逻辑模型转化为物理模型,为数据库表间的联系建立新表,指明表的主码、外码,并自动对数据库表进行一致性、冗余性、完整性检查,使数据库表满足第三范式。

---- 例:可首先设计出数据库表课程(Courses)和学生(Client)的逻辑模型:

---- 接下来,为表Courses和Client间建立联系。由S-Designer自动生成的物理模型,如下图所示,它们为访库组件的接口设计提供了准确的依据。

---- 可以相信,随着软件工程学的进一步成熟,将出现更多的计算机辅助工具,帮助软件开发人员构建出更完善的应用系统。许多辅助软件工具可以完成相似的工作,到底选用何种辅助工具取决于这些工具的性能以及使用者的习惯。

---- 以组件对象为中心的动态Web方法和DNA思想并不高深莫测,开发技术也愈加规范化。应当说,这套方法更适合客观信息结构的现实,也更接近于人们的思维方式,其技术有如行云流水般自然,很适合在中小型企业环境中推广和普及。
关注此文的读者还看过:
·2012-5-21 17:02:15 如何使用asp创建dsn?
·2012-5-21 17:02:04 ASP面向对象编程探讨及比较
·2012-5-21 17:01:55 ASP.NET:访问Excel 电子表格
·2012-5-21 16:57:16 最优化ASP程序性能
·2012-5-21 16:55:26 自动清空站点目录下所有文件
·2012-5-21 16:54:59 ASP实现多语言支持
·2012-5-21 16:50:54 通过web.config配置数据库连接池
·2012-5-21 16:49:49 Android Map开发基础知识学习笔记
·2012-5-21 16:45:38 让asp立即输出缓存(Response.flush),实时显示进度
站长推荐 PS笔刷下载 在线翻译 系统进程 广告代码
  发表评论
姓 名: 验证码:
内 容:
教程搜索服务
ASP源码推荐
·忠网广告管理系统ZonGG V1.2
·网趣网上购物系统时尚版 v11.0
·W656自助链 v1.2
·西政科技企业网站管理系统 5.1
·财务收支统计系统 v1.4
·顺德供求网
·清茶道场
·CC城市校友录 v0607 Plus Build
·当代大学生家教信息网
·K风搜索(K-Search) v3.0 Build
·亚阳影视系统 2007版
·DunkBBS v1.0 个人免费版
项目外包信息
·汽车配件网站制作 50000元
·整站SEO优化
·课件门户网程序
·求长期合作网站设计制作高手
·公司网站重新改版 8000元
·asp企业网站小改动
·网站flash片头
·文化传播公司网站设计稿
·UI界面设计
·产品外观改版设计 15000元
·照明灯具网站设计 10000元
·求长期合作网站设计制作高手
·做B2C网站 20000元
·Android或QT软硬件平台设计(工
·网站首页FLASH
发布信息 浏览信息
邮件订阅服务
输入你的邮件地址,你将不会错过任何关于<ASP技巧>的内容


网络编程文章分类
ASP教程
ASP实例
ASP技巧
ASP文摘
PHP教程
PHP技巧
PHP实例
PHP文摘
JSP教程
JSP技巧
JSP实例
JSP文摘
ASP.NET教程
ASP.NET技巧
ASP.NET实例
ASP.NET应用
xml教程
xsl教程
xml技巧
C#教程
C#应用
Delphi教程
Perl教程
Shell教程
Ajax教程
Visual Basic教程
Java教程
J2EE/J2ME教程
C/C++教程
移动解决方案
移动短信技术
移动行业动态
软件工程
WordPress
Android开发
站长工具:Google PR查询|Alexa排名查询|网站速度测试|CSS在线编辑器|OPEN参数生成器|弹出式窗口代码产生器|密码登录生成器|在线按钮生成器|Meta标签生成器|邮箱图标在线生成|多色彩特效字代码生成器|网页代码调试器|在线FTP登陆|Flash取色器|配色代码对照表|配色辞典|CSS生成器|CSS在线压缩|广告代码|框架网页代码生成器|js/vbs加密|md5加密|进制转换|UTF-8 转换工具|在线调色板|Html转换js|Html转换asp|Html转换php|Html转换perl
实用工具:汉字翻译拼音|拼音字典|在线翻译|天气预报|火星文|在线网速测试|符号对照表|个税计算|理财工具|黄金价格|购房银行按揭利率计算|汇率查询|经典小工具|汉字简繁转换|普通单位换算|公制单位换算|生辰老黄历|国内电话区号|国家代码与域名缩写|文字加密解密|元素周期表|健康查询|世界时间|全国各地车牌查询|全国车辆交通违章查询|万年历|二十四节气|汉字横竖排版|手机号码查询|计算器|ip搜索|酒店预订|机票预订
广告刊登 | 版权声明 | 联系我们 | 加入收藏 | RSS订阅
Copyright © 2000-2012 www.knowsky.com All rights reserved | 沪ICP备05001343号