第四章 信息系统设计
主要内容,针对信息系统设计的各项任务来介
绍这一阶段的开发方法和对策 。
4.1 信息系统设计概述
? 4.1.1 系统设计的任务
– 系统设计的任务就是依据系统分析文档资料,
采用正确的方法来确定系统各功能模块在计
算机内应该由哪些程序组成,它们之间用什
么方式联结在一起以构成一个最好的系统机
内结构,同时还要使用一定的工具将所设计
的成果表达出来,另外考虑到实现系统功能
的需要,还要进行数据库的详细设计、编码
设计、输入 /输出界面(人 —机界面)设计
等等
4.1.2 系统设计步骤
? 第一步进行数据库的物理设计 。 根据总体方案及系统分析的实际
需求, 考虑数据库的存储方式 ( 集中式或分布式 ) ;考虑物理库
的数量及每一个物理库所包含的数据库表的内容;从查询处理效
率等方面考虑数据库表的索引问题等等 。
? 第二步进行编码设计 。 编码是系统的重要组成部分, 与数据的规
范性和交换性密切相关, 编码一旦被设计处理将会永久使用并常
驻于数据库中, 因此需要在系统设计阶段给出具有永久性, 稳定
性的编码设计方案 。
? 第三步进行界面设计 。 构造良好的界面是未来系统能够顺利运行
的重要前提, 要使信息系统使用起来更加舒适, 更加高效就需要
在界面设计方面具有一个全新的设计策略, 这个设计策略要在程
序设计之前完成 。
? 第四步进行系统功能设计 。 功能设计是在前面所有工作基础上进
行的, 它主要是采用, 自顶向下, 的原则考虑模块的划分与设计,
使模块内部以及模块与模块之间的连接具有合理的结构 。 功能设
计结果的表达方式可以有两种:一种是利用, 结构图, 来描述模
块的功能和模块之间的信息交换;另一种是用 Rational Rose工具
来描述 。 功能设计中通常有一组评价标准来对设计结果进行评价,
同时使用一组设计原则对系统模块进行优化设计 。
4.1.3 系统设计评价标准
? 1、运行效率
? 2、可靠性。
? 3、可修改性
? 4、灵活性
? 5、通用性
? 6、实用性
影响系统处理能力的因素:
? ①、系统中间文件的数量
? ②、数据文件的检索次数
? ③、外存访问次数
? ④、程序的调用和其它的系统开销所花费的时间
? ⑤、程序的执行时间
可靠性 应考虑的问题:
? ①、校验码
? ②、批量控制
? ③、建立运行日志和信息追踪
? ④、文件的存取限制
可靠性指标,
?, 平均故障间隔时间,
– ( Mean_Time_Between_Failures,—MTBF)
?, 平均修复时间,
– ( Mean_Time_To_Repairs,—MTTR)
? 系统的有效性 =MTBF/( MTBF+MTTR)
提高系统可修改性的原因:
? ①、由于系统是在一个实际的客观环境中运行,它的数据来自于
客观现实,而客观世界是在不断地变化的,它导致客观数据的变
化和功能需求的变化,为了适应这种不断变化需求,必然要求信
息系统也随之而变化,即对信息系统做相应的修改。
? ②、由于计算机技术在不断地发展,硬件价格越来越便宜,新的
操作系统和程序语言在不断地出现或升级,计算机网络技术和通
讯技术也在不断地发展,这些必然对信息系统产生影响,迫使用
户考虑使用新的技术、更新设备、提高系统运行效率、完善系统
功能等等。
? ③、无论是在系统分析、系统设计、程序设计及调试阶段,都可
能会发现一些问题导致对前一阶段的工作进行修正,到了系统测
试阶段也必然会发现一些问题和故障需要给予解决,这些都意味
着对系统的修改。
? ④、对于一个复杂的系统来说,不可能在系统测试阶段就能够完
全彻底地把故障全部排除,有的错误可能会在系统运行阶段才能
暴露出来,要把这些错误纠正过来称为运行纠错,这同样意味着
对系统进行修改和维护。
4.2 数据库设计和编码设计
?4.2.1 数据库设计
外模式外模式外模式外模式
概念
要求
概念
要求
概念
要求
概念
要求
应用 1
应用 2
应用 3
应用 4
应用 1 应用 2 应用 3 应用 4
概念
模式
逻辑
模式
综合 映象
映象
映象
内模式
数据库设计内容:
? 1、用户权限的设计
? 2、索引文件的设计
? 3、中间文件或临时文件的设计
? 4、视图( View) 的设计
4.2.2 编码设计
? 编码设计的地位和作用
总体规划 应用系统分析
应用系统设计
应用系统建造
应用系统 1 应用系统 2 应用系统 N
信息分类编码
.,,,,,,,
编码设计步骤
? 对编码对象进行科学分类
? 按照一定的规则设计代码
分类的原则,
? 科学性:通常要选择事物或概念 ( 即分类对象 ) 中最
稳定的本质属性或特征作为分类的基础和依据 。
? 系统性:将选定的事物或概念的属性特征按一定的排
列顺序予以系统化, 并形成一个合理的科学分类体系 。
? 可扩展性:分类要具有可拓展的类目, 以保证增加新
的事物或概念时, 不致于打乱已建立的分类体系, 同
时还应为下级信息系统在本分类体系的基础上进行延
拓细化创造条件 。
? 兼容性:与有关标准 ( 包括国际标准, 国家标准, 行
业标准等 ) 协调一致 。
? 综合实用性:分类要从系统出发, 把全局问题放在系
统整体中处理, 以达到全系统最优
信息分类的基本方法:线分类法和面分类法。
? 1、线分类法,
– 线分类法也称层级分类法。它是将初始的分类对象
(即被划分的事物或概念)按所选定的若干属性或
特征(作为分类的划分基础)逐次地分成相应的若
干层级的类目,并排成一个有层次的、逐级展开的
分类体系。
? 上位类:即在线分类体系中,一个类目相对于由它直
接划分出来的下一级类目而言,称为上位类。
? 下位类:即在线分类体系中,由上位直接划分出来的
下一级类目相对于上位类而言,称为下位类。
? 同位类:即在线分类体系中,由一个类目直接划分出
来的下一级中的各类目,彼此称为同位类。
? 例如,GB2260-86,中华人民共和国行政区划代码》
采用的是线分类法,将全国行政区划分为三层:
– 第一层为省(自治区、直辖市)
– 第二层为地区(市、州、盟)
– 第三层为县(市、旗、镇、区)。 省


辽宁省
沈阳市 大连市
中山区 沙河口区 西岗区
......吉林省
......
......
线分类法的原则:
? 在线分类中, 由某一上位类划分出来的下位类
类目的总范围应与上位类类目相等;
? 当某一个上位类类目划分成若干个下位类类目
时, 应选择一个划分基准:
? 同位类类目之间不交叉, 不重复, 并只对应于
一个上位类;
? 分类要依次进行, 不应有空层或加层 。
? 线分类法的优点是:
– 层次性好, 能较好地反映类目之间的逻辑关系
– 使用方便, 既符合手工处理信息的传统习惯, 又便
于计算机处理信息
? 线分类法的缺点是:
– 结构弹性较差, 分类结构一经确定, 不易改动;
– 当分类层次较多时, 为其所设计的代码位数会比较
大, 影响数据处理的效率与速度 。
2、面分类法
? 面分类法是将所选定的分类对象的若干个属性
或特征视为若干个, 面,,每个, 面, 中有可
分成彼此独立的若干个类目,再按一定的顺序
将各个, 面, 平行排列。使用时可根据需要将
这些, 面, 中的类目按指定的顺序组合在一起,
形成一个新的复合类目。
? 例如:服装的分类可采用面分类法,选择服装
材料、男女式样、服装款式三个属性作为三个
,面,,每个, 面, 又可分成若干个类目,如
下表。
材料 男女式样 服装款式
纯棉 男式 中山装
纯毛 女式 西服
中长纤维 …… 连衣裙
…… ……
面分类法的原则:
? 根据需要选择分类对象本质的属性或特征作为分
类对象的各个, 面,
? 不同面内的类目不应相互交叉, 也不能重复出现
? 每个, 面, 有严格的固定位置
?, 面, 的选择以及位置的确定, 根据实际需要而
定 。
? 面分类法的优点:
– 具有较大的弹性, 一个, 面, 内类目改变,
不会影响其它的, 面,
– 适应性强, 可根据需要组成任何类目, 同时
也便于计算机处理信息
– 易于添加和修改类目
? 面分类法的缺点:
– 不能充分利用容量, 可组配的类目很多, 但
有时实际应用的类目不多
– 难于手工处理信息
代码的功能,
? 信息代码是一个或一组有序的、易于计算机和人识别
与处理的符号,有时也称为, 码,,功能如下:
– 标识:代码是鉴别编码对象的唯一标志
– 分类:当按编码对象的属性或特征分类,并赋予不
同的类别代码时,代码又可以作为区分编码对象类
别的标志
– 排序:当按编码对象发现(产生)的时间、所占有
的空间或其他方面的顺序关系分类,并赋予不同的
代码时,代码又可作为编码对象排序的标志
– 特定含义:代码是在一定分类体系下产生的,因此
代码可提供一定的特定含义
代码设计的基本原则,
? 唯一性
? 合理性
? 可扩充性
? 简单性
? 适用性
? 规范性
常用代码设计方案,
? 顺序码:
– 顺序码是一种用连续数字代表项目名的编码 。
例如:
? 00 学校
? 01 数学系
? 02 物理系
? ……
? 表意码
– 表意码是把直接或间接表示编码化对象属性
的某些文字、数字、记号原封不动作为编码
编码 中文 英文
MT 米 Meter
CM 厘米 Conti-meter
MM 毫米 Milli-meter
TN 吨 Ton
KG 公斤 Kilo-guam
LR 克 Litre
…… …… ……
? 位别码,
– 位别码是用不同的位来代表不同的类别,每
一为具有某一类别含义。
? 例如:
– 在行政区划代码( GB2260—84) 中用第一、
二位描述省(自治区、直辖市)、用第三、
四位描述市(市、州、盟)、第五、六位描
述县(市、旗、镇、区)
1 2 3 4 5 6
省 市 区
? 合成码:
– 合成码是把编码对象用两种以上的代码方案
进行组合。
? 例如,
代码 名称
…… ……
210000 辽宁省
210100 沈阳市
210200 大连市
210201 大连市中山区
210202 大连市沙河口区
…… ……
? 服装代码:
?, 0101001” 表示一款纯棉男式中山装
?, 0102002” 表示一款纯棉女式西服
材料 男女式样 服装款式
01 纯棉 01 男式 001 中山装
02 纯毛 02 女式 002 西服
03 中长纤维 …… …… 003 连衣裙
…… …… …… ……
分类编码的设计步骤,
? ① 选定编码化的对象
? ② 明确编码化的目的及编码在系统中的作用
? ③ 确定编码使用范围
? ④ 确定编码使用期限
? ⑤ 决定编码方法
4.3 人机界面设计
? 4.3.1 输入 /输出方式
– 输入 /输出方式
?①、键盘输入
?②,A/D,D/A( 即模 → 数、数 → 模)转换
?③、网络或通讯传输
?④、报表
?⑤,图形输出
?⑥,数据输入 /输出过程是批处理还是实时处理
? 校对方式
– ①、人工校对
– ②、二次键入
– ③、利用统计中的一些平衡关系或财务帐目
中的平衡关系来进行校对
入学年份 本科生人数 大专生人数 学生总数
1993 1589 189 1778
1994 1487 127 1614
1995 2001 193 2194
1996 1983 270 2253
合计 7060 779 7839
4.3.2操作模式的设计
? 界面是系统的 感知器官 。为了使系统能够更好
地工作,在界面上必须要有充分的提示来说明
哪一部分是用来操作的以及它们是如何操作的,
提示用户如何实现人机交互,这就是功能的 可
见性 。为了在设计中实现可见性,每一项功能
及其操作方法对于界面所处环境中的大多数用
户来说必须是显而易见的,只需看一眼就可以
有所了解,具有这种特点的控制方法成为, 可
供性,,可供性提供了大量的和操作有关的线
索,
操作模式的设计的步骤
? 分解元动作
? 进行操作模式的设计
? 进行界面的统一性设计
元动作:
? 元动作是用户实现各种操作最基本的单元,在
元动作的集合上所有的人机交互都可以实现。
? 例 1(属性操作元动作):
– 出生日期:键盘输入
– 输入方式的方案可以是,
年 月 日
年 月 日
出生日期
方案一:
方案二:
方案三:
? 例 2( 功能性动作 )
– 功能操作有:输入学生信息、修改学生信息、删除
学生信息、查询等
– 功能性动作设计方案可以是:
? 设计中要注意以下几个问题:
– ①, 操作要尽可能地发挥计算机的优势;
– ②, 操作要尽可能地符合用户的操作习惯;
– ③, 操作要尽可能地简单, 明了, 使用方便 。
4.3.3 界面统一性设计
? 1、风格设计
? 2、导航设计
? 3、可靠性设计
? 导航设计方案:
教学管理系统
学生信息
管理
课程信息
管理
教师信息
管理
教室信息
管理
排课
成绩管理
统计
打印报表
教师任课
信息管理
( a ) 功能按钮方式
教学管理系统
学生信息管理 课程信息管理 成绩信息管理 教师信息管理 教室信息管理 教师任课管理 排课 统计 打印报表
基本信息管理
奖励信息管理
处分信息管理
异动信息管理
课外活动管理
考试成绩
重修成绩
计算机排课
排课调整
开课统计
班级人数统计
打印班级课表
打印教师课表
打印教室课表
异动信息统计
( b ) 菜单选择方式
可靠性设计:
? 减少操作错误的措施:
– 输入操作符应尽可能简单、易记忆,提示要简短、
明了。
– 对一些参数可以设置缺省值
– 设置容忍用户操作上失误,提示错误信息,将光标
移动到出错位置上并允许用户改正的机制,允许重
操作
– 给出运行状态提示,防止错误积累
– 检测用户错误,屏蔽输入错误,及时提供出错信息
货物重量
(a)
货物重量(kg)
(b)
界面设计目标:
? ①、简单性
? ②、可靠性
? ③、易学习与易使用性
? ④、立即反馈性
4.4 功能设计的基本方法
? 系统功能设计的基本方法是利用结构图
来描述系统设计结果,首先使用一组设
计策略将系统分析阶段所形成的逻辑结
构(数据流程图)转换成初始的结构图,
然后使用一组设计原则和一组评价标准
对初始结构图进行优化设计,最终形成
具有良好结构的功能设计方案。
? 模块是具有四种属性的一组程序语句,
这四个属性分别是输入 /输出、逻辑功能、
运行程序、内部数据
4.2.1 结构图
? 图例:
– 模块之间的调用关系
– 数据传递关系
– 判断调用 关系
A
B
数据 标识
A
B
A
CB D
( a ) ( b )
– 循环调用关系
– 转接符号
– 示例:
A
B
A
Bd
d
确定补考学生
获得成绩单 产生补考通知
打印补考通知获得学生地址
成绩单
成绩单
学生地址 补考通知
学生学号
结构图的优点,
? 1,具有很高的可读性, 便于理解和讨论 。
? 2,采用, 自顶向下, 的原则逐层扩展而得到的图形,
因此它可以用来表达系统的总体结构 。 同时也能够把
整个设计任务分散开来, 交给若干个设计人员进行不
同部分的设计工作, 既便于管理, 又能够加快设计进
度, 提高工作效率 。
? 3,它具有较高的严密性, 又有灵活性 。 结构图能够准
确地表达系统中各个组成部分以及它们之间的联结关
系, 具有很强的严密性 。 同时它能够随着数据流程图
的改变而改变, 具有很高的灵活性, 易于修改和维护 。
? 4、结构图作为系统设计的重要工具,不但能够在系统
设计阶段发挥作用,而且还是程序设计、系统测试、
系统维护工作顺利进行的重要保证。
4.2.2 功能模块转换策略
? 1、事务分析
– 高层的数据流程图特别是一级数据流图所表
示的处理功能都是相对独立的,可以把它们
看成是一类类特定的事务,将其转换为结构
图 。
XX
AA BB
D1
CC
D2
( a ) ( b )
YY
ZZ
系统
CCBBAA
1
2
3
1 2 3
将教学管理系统二级数据流程图转换成结构图
学籍处理
1
教务处
上级主
管部门
教师任课数据库
学生学籍管理数据库
学生工
作部
院系
学生奖励通知
学生处分通知
学生课外活动信息
专业教
学秘书
制定教学
计划
2
教务处
课程管理数据库
教学计划
院系
教师任课信息表
教师基本
信息管理
3
教务处
教师数据库
人事处
教师信息表
教室设施
管理
4
教务处
教室数据库
排课
5
教务处
课表数据库
学生
学生登记表
学生
学籍变动通知
院系
教学计划
教师
教师
课表
学生
教室管
理员
院系
教室
课表
学生
课表
班级
课表
成绩管理
7
教务处
学生成绩数据库
网上
学生选课
6
学生
统计报表
处理
8
教务处
教师任课数据库
校领导
统计数据库
教师开课统计表
学生情况统计表
学生异动情况统计表
网上信息
查询
9
院系
教学管理系统
学籍处理
统计报表
处理
制定教学
计划
教师基本
信息管理
成绩管理
教室设施
管理
网上学生
选课
排课
网上信息
查询
系统内部业务 网上信息服务
将教学管理系统三级数据流程图转换成结构图
教学管理系统
学籍处理
统计报表
处理
制定教学
计划
教师基本
信息管理
成绩管理
教室设施
管理
网上学生
选课
排课
网上信息
查询
系统内部业务 网上信息服务
学生档
案管理
学籍变
动处理
奖励信
息管理
处分信
息管理
课外活
动管理
审核
学籍
排课
调整
课表
打印教
师课表
打印学
生课表
打印教
室课表
教学计
划管理
教学计
划打印
任课信
息管理
开课情
况统计
统计学
生人数
统计学
生变动
毕业资
格审查
2、变换分析
? 变换分析提供了一种把叶子层模块转换成结构图的方法
– 首先对叶子层模块中的处理功能进行分类
? 第一类是输入功能,这类处理功能的特点是对数据的变换只
是一些形式上的加工,如编辑、验证、排列等。假设输入数
据流是 X,该处理功能为 G,它产生的数据流是 X',则 X'
=G( X)。
? 第二类处理功能是执行变换功能,它对数据流 X' 进行实质
性的变换,即进行真正的处理,假设它的功能为 F,它所产生
的数据数据流是 Y',则 Y' =F( X')。
? 第三类处理功能是输出功能,它对数据流 Y' 进行形式上的
加工,如排列显示格式等等,然后输出数据流 Y,假设它的
功能是 H,则 Y=H( Y')。
– 根据分类结果确定第二类处理功能即为变换中心,画
出结构图
采用变换分析方法绘制结构图:
AA
G F H
UU G F H VV
X X ' YY '
X '
X ' Y '
Y '
变换中心
利用事务分析和变换分析绘制的“教师基本信息管理”功能结构

教师基本
信息管理
添加 删除 修改 查询
获得
添加
信息
执行
添加
存盘
显示
添加
结果
输入
查询
条件
查询
并显
示查
询结

获得
删除
信息
执行
删除
操作
输入
查询
条件
查询
并显
示查
询结

显示
并获
得修
改信

执行
修改
存盘
获得
修改
前信

输入
查询
条件
查询
并显
示查
询结























































4.2.3 功能模块优化设计原则
? 1、模块之间的耦合原则
– 影响模块之间耦合程度的最主要因素是模块
之间信息传递的复杂性。如果两个模块之间
仅存在调用与被调用关系,在它们之间没有
任何的信息传递,这表示两个模块的耦合程
度最低,称作简单耦合。
①、数据耦合
? 如果两个模块之间不仅存在调用与被调用关系,
而且还存在着数据通讯,也就是模块之间的通
讯方式是数据传递或称参数交换,这种耦合称
为数据耦合。
计算水电费
计算水费 计算电费
住户详情 住户详情
水费 电费
计算水电费
计算水费 计算电费
本月用
水量
本月用
电量
水费 电费
②、控制耦合
? 如果两个模块之间不仅存在调用与被调用关系,
而且模块 A向模块 B传递的信息控制了模块 B的
内部逻辑,那么模块 A,B之间的耦合称为控
制耦合。 公布成绩
确定成绩等级
不成绩




③、公共耦合
? 如果两个模块都和同一个公用数据域有关,或
与某一个公共环境联系在一起,那么在这两个
模块之间存在着公共耦合。
A
B C
D E
公用
数据
2、模块的内聚性原则
? 所谓模块内部的, 组成部分, 是指该模块运行
程序中的一个动作、一组指令或一个调用其它
模块的语句。内聚性是度量模块功能强度的一
个相对指标,主要表现在模块内部各组成部分
为了执行处理功能而组合在一起的相关程度,
即组合强度。
? ①、功能组合
– 如果一个模块内部的各个组成部分的处理动
作全都为执行同一个功能而存在,并且只执
行一个功能,那么这种组合称为功能组合。
? ②、顺序组合
– 如果一个模块内部的各个组成部分执行的几
个处理动作有这样的特征:前一个处理动作
所产生的输出数据是下一个处理动作的输入
数据,那么这种组合称为顺序组合。
? ③、通讯组合
– 如果一个模块内部的各个组成部分的处理动
作都使用相同的输入数据或产生相同的输出
数据,那么这种组合称为通讯组合。
? ④、过程组合
– 如果一个模块内部各组成部分的处理动作各不相同,
彼此也没有什么关系,但它们都受同一个控制流支
配,决定它们的执行顺序,那么这种组合称为过程
组合。
? ⑤、暂时组合
– 如果一个模块的各组成部分,它们的处理动作和时
间有关,那么这种组合称为暂时组合,也称为时间
组合模块。
? ⑥、逻辑组合
– 如果一个模块内部各个组成部分的处理动作在逻辑
上相似,但功能却彼此不同或无关,那么这种组合
称为逻辑组合。
? ⑦、偶然组合
– 如果一个模块内部各组成部分的处理动作彼此没有
任何关系,那么这种组合称为偶然组合。
模块组合形式判断树
功能组合
顺序组合
通讯组合
过程组合
暂时组合
逻辑组合
偶然组合
次序重要吗?
次序重要吗?
逻辑相似吗?
模块内各组成
部分关系如何?
该模块只执
行一个功能?
是 是






数据流
控制流
两者皆非
3,模块的分解原则
? 模块的分解是指把一个模块分解成若干个从属
于它的新模块。
? 在分解一个大模块时,不能单凭语句条数的多
少,而主要是按功能进行分解,直到无法做出
明确的功能定义为止。在分解时既要考虑到模
块的内聚性,又要考虑到模块之间的耦合程度,
并在这两者之间选择一个最佳的方案。
4、模块的扇入和扇出原则
? 模块的扇出( Fan_Out) 表达了一个模块对它的直属
下级模块的控制范围。模块的扇出系数是指其直属下
级模块的个数。
? 模块的扇入( Fan_In) 表达了一个模块与其直属上级
模块的关系。模块的扇入系数是指其直接上级模块的
个数。
? 原则:
– 模块的直属下级模块越多,表明它要控制许多模块,
所要做的事情也就越多,它的内聚性可能越低。所
以要尽量把一个模块的扇出系数控制在较小的范围
之内。
– 模块的扇入系数越大,表明它要被多个上级模块所
调用,其公用性很强,说明模块分解得较好,在系
统维护时能够减少对同一功能的修改
模块的分解:
A
M N
B
( a )
A B
K
M '
( b )
N '
“教师基本信息管理”模块优化结果:
教师基本
信息管理
添加
删除修改 查询
获得
添加
信息
执行
添加
存盘
显示
添加
结果
获得
删除
信息
执行
删除
操作
输入
查询
条件
查询
并显
示查
询结

显示
并获
得修
改信

执行
修改
存盘
获得
修改
前信























































数据正确
性验证




正确标志




4.5 基于 UML的功能设计方法
? 4.5.1 Struts框架
– 4.5.1.1 MVC模型
客户
浏览器、客户端
(HTML)
控制器
Co n tro ll er
( Se r v let)
视窗
View
( JS P)
模型
Mod el
( Bea n /EJB)
数据库
文件系统
其它后端系统
请求
响应
创建


存取
? 模型:包含了应用程序功能核心, 它封装了应用程序
的数据结构和事务逻辑, 集中体现了应用程序的状态 。
? 视窗:是模块的外观, 它是应用程序的外在表现, 它
可以访问模型的数据, 但不能改变这些数据, 视窗不
了解模型和控制的情况, 当模型发生改变时, 视窗会
得到通知, 因而界面的开发人员不需要了解或关心数
据库发生什么事情, 或者事务逻辑组件进行了什么操
作, 界面制作技术就可以了 。
? 控制器:是对用户的输入做出反映并且将模型和视窗
联系在一起, 它创建并设置模块 。
– 如果使用 MVC框架开发 B/S结构的应用系统, 则通
常使用 JavaBean进行模型设计与开发, 视窗则可以
利用 JSP来开发, 客户端使用 HTML来实现, 控制器
则通常使用 Servlet,它调用 JavaBean,并且负责选
择正确的 JSP页来创建和显示动态内容 。
4.5.1.2 Struts框架
Action Mapping Action
ActionForward
ActionErrors ActionError
Action Servlet JSP
ActionForm
Tag Libary
使用 使用 使用
模型的事务逻辑
使用、
创建
创建
使用、
创建
使用、
创建
使用


模型的数据
控制器 视窗组件
? 1、控制器 (Controller):
– 控制器的作用是从客户端接受请求,并且选择执行
相应的业务逻辑,然后把响应结果送回到客户端。
– 在 Struts中 Controller功能由 ActionServlet和
ActionMapping对象构成,核心是一个 Servlet类型
的对象 ActionServlet,它用来接受客户端的请求。
ActionServlet包括一组基于配置的 ActionMapping
对象,每个 ActionMapping对象实现了一个请求到
一个具体 Action处理器对象之间的映射。
? 2、模型 (Model):
– Model部分从概念上可以分为两类 ——系统的内部状态和改变
系统状态的动作。 Struts为 Model部分提供了 Action和
ActionForm对象:所有的 Action处理器对象都是开发者从
Struts的 Action类派生的子类。 Action处理器对象封装了具
体的处理逻辑,调用业务逻辑模块,并且把响应提交到合适
的 View组件以产生响应。 Struts提供的 ActionForm组件对象,
它可以通过定义属性描述客户端表单数据。开发者可以由它
派生出子类对象,利用它与 Struts提供的自定义标记库结合
可以实现对客户端的表单数据的良好封装和支持,Action处
理器对象可以直接对它进行读写,而不再需要和 request、
response对象进行数据交互。通过 ActionForm组件对象实现
了对 View和 Model之间交互的支持。 Struts通常建议使用一组
JavaBean表示系统的内部状态,根据系统的复杂度也可以使
用像 Entity EJB 和 Session EJB等组件来实现系统状态。
Struts建议在实现时把, 做什么, (Action)和, 如何做,
(业务逻辑 ) 分离。这样可以实现业务逻辑的重用。
? 3、视图 (View):
– Struts应用中的 View部分是通过 JSP技术实现
的。 Struts提供了自定义的标记库可以使用,
通过这些自定义标记可以非常好地和系统的
Model部分交互,通过使用这些自定义标记
创建的 JSP表单,可以实现和 Model部分中的
ActionForm的映射,完成对用户数据的封装,
同时这些自定义标记还提供了模板定制等多
种显示功能。
4.5.2 功能设计 (以, 教师基本信息管理, 用例为例)
? 4.5.2.1 对象及类的设计
? 1,视窗 ( View) 部分
– 在系统分析阶段, 根据用户的需求已经设计出了三个对象:
教师基本信息管理页面对象, 教师信息编辑页面对象和教师
实体对象, 采用 Struts框架则教师基本信息管理页面和教师
信息编辑页面自然是 MVC模型中的视窗部分 ( 即 View部分 ) 。
? 2,控制器 ( Controller) 部分
– Struts框架的控制器部分由 ActionServlet和 ActionMapping
对象构成, 因此在教师基本信息管理用例中增加两个与之对
应的对象 ——控制器对象和教师管理控制对象 。
? 3,模型 (Model)部分
– Struts结构为 Model部分提供了 Action和 ActionForm对象, 由
于 Struts建议在实现时把, 做什么, (Action)和, 如何做,
( 业务逻辑 ) 分离, 实现业务逻辑的重用, 因此在设计时引
入两个对象:教师管理事务对象和教师数据存取对象, 另外
利用数据库连接池对象实现与数据库的交互 。
对象及类的设计结果:
教师基本信息
管理页面
教师信息
编辑页面
控制器
ActionServlet
教师管理控制对象:
TeacherController
教师管理事务对象:
TeacherBO
教师数据存取对象:
TeacherDAO
教师实体:
Teacher
数据库连接池:
ConnectionPool
? 4.5.2.2方法的映射
– 第一组(清空查询条件):, 请求清空, 是由角色向教师基
本信息管理页面发起,,清空查询条件, 又在页面上进行,
两个消息的实现均采用 JSP技术实现。
– 第二组(添加操作),通过教师信息编辑页面向, 教师管理
控制, 对象提交请求,控制对象将请求事务提交给, 教师管
理事务对象,,, 教师管理事务对象, 则根据请求内容向
,教师数据存取对象, 发添加教师的消息,由, 教师数据存
取对象, 向教师实体、数据库连接池发布指令,通过获得连
接和存储数据两个动作实现存盘操作。
– 第三组(查询操作),在教师基本信息管理页面上获得查询
条件后,由该页面直接向, 教师管理控制, 对象提交消息,
控制对象向, 教师管理事务, 对象提交查询请求消息,事务
对象再将查询条件消息转发给, 教师数据存取, 对象,由
,教师数据存取对象, 向教师实体、数据库连接池发布指令,
通过获得连接和查询数据两个动作实现查询操作。
– 第四组(修改操作)和第五组(删除操作) 的处理方式与前
面基本相同,都是页面向控制对象发送消息,控制对象再将
这些消息转发给事务对象,事务对象分析操作类型后再把相
应的操作要求转发给数据存取对象,由数据存取对象通过数
据库连接池和数据实体最终实现相应的数据操作。
建立方法:
4.5.2.3 类图的优化
?,教师基本信息管理类图”
Conn ectionPo ol
getC onnectio n(), Co nnectio n
Conn ectionPo ol()
Teac her
Teac her()
sett eacher_i d(teache r_id, String), void
gett eacher_i d(), St ring
Teac herContr oller
perf orm()
Teac herContr oller()
Teac herDAO
Teac herDAO()
dele te(teach er_no, String), void
upda te(form, Action Form), void
quer y(form, ActionF orm), ArrayLis t
add( form, A ctionFor m), vo id
add( ), void
dele te(), v oid
upda te(), v oid
quer y(), Ar rayList
+the Connecti onPool
+the Teacher
Teac herBO
add( form, A ctionFor m), vo id
quer y(form, ActionF orm), ArrayLis t
upda te(form, Action Form), void
dele te(form, Action Form), void
Teac herBO()
+the TeacherB O
+the TeacherD AO
Acti on
DATA _SOURCE_ KEY, St ring
ERRO R_KEY, String
EXCE PTION_KE Y, Stri ng
FORM _BEANS_K EY, Str ing
FORW ARDS_KEY, Strin g
LOCA LE_KEY, String
MAPP ING_KEY, String
MAPP INGS_KEY, Strin g
MESS AGES_KEY, Strin g
MULT IPART_KE Y, Stri ng
SERV LET_KEY, String
TRAN SACTION_ TOKEN_KE Y, Str ing
defa ultLocal e, Loca le
Acti on()
getS ervlet()
setS ervlet()
perf orm()
perf orm()
perf orm()
perf orm()
gene rateToke n()
getL ocale()
getR esources ()
isCa ncelled( )
isTo kenValid ()
rese tToken()
save Errors()
save Token()
setL ocale()
toHe x()
Acti onForm
Acti onForm()
getS ervlet()
getS ervletWr apper()
getM ultipart RequestH andler( )
setS ervlet()
setM ultipart RequestH andler( )
rese t()
rese t()
vali date()
vali date()
vali date()
完成“教师基本信息管理”、“教室设施管理”、“学生基本信息
管理”类图设计后的总体类图
R o o m
R o o m ( )
se t r o o m _ i d ( )
g e t r o o m _ i d ( )
R o o m C o n t r o l l e r
p e r f o r m ( )
R o o m C o n t r o l l e r ( )
S t u d e n t C o n t r o l l e r
p e r f o r m ( )
T e a ch e r C o n t r o l l e r
p e r f o r m ( )
T e a ch e r C o n t r o l l e r ( )
T e a ch e r
T e a ch e r ( )
se t t e a ch e r _ i d ( )
g e t t e a ch e r _ i d ( )
S t u d e n t
se t st u d e n t _ i d ( )
g e t t e a ch e r _ i d ( )
C o n n e ct i o n P o o l
g e t C o n n e ct i o n ( ), C o n n e ct i o n
C o n n e ct i o n P o o l ( )
R o o m B O
a d d ( )
d e l e t e ( )
u p d a t e ( )
q u e r y ( )
R o o m B O ( )
+ t h e R o o m B O
R o o m D A O
R o o m D A O ( )
a d d ( ), v o i d
d e l e t e ( ), v o i d
u p d a t e ( ), v o i d
q u e r y ( ), A r r a y L i st
+ t h e R o o m
+ t h e C o n n e ct i o n P o o l
S t u d e n t B O
a d d ( )
q u e r y ( )
u p d a t e ( )
d e l e t e ( )
S t u d e n t B O ( )
+ t h e S t u d e n t B O
S t u d e n t D A O
a d d ( )
q u e r y ( )
u p d a t e ( )
d e l e t e ( )
+ t h e S t u d e n t
+ t h e C o n n e ct i o n P o o l
T e a ch e r B O
a d d ( )
q u e r y ( )
u p d a t e ( )
d e l e t e ( )
T e a ch e r B O ( )
+ t h e T e a ch e r B O
T e a ch e r D A O
T e a ch e r D A O ( )
d e l e t e ( )
u p d a t e ( )
q u e r y ( )
a d d ( )
a d d ( )
d e l e t e ( )
u p d a t e ( )
q u e r y ( )
+ t h e T e a ch e r
+ t h e C o n n e ct i o n P o o l
t h e R o o m D A O
t h e S t u d e n t D A O t h e T e a ch e r D A O
优化后的总体类图
T e a ch e r C o n t r o l l e r
p e r f o r m ( )
T e a ch e r C o n t r o l l e r ( )
R o o m C o n t r o l l e r
p e r f o r m ( )
R o o m C o n t r o l l e r ( )
T e a ch e r B O
a d d ( )
q u e r y ( )
u p d a t e ( )
d e l e t e ( )
T e a ch e r B O ( )
+ t h e T e a ch e r B O
R o o m B O
a d d ( )
d e l e t e ( )
u p d a t e ( )
q u e r y ( )
R o o m B O ( )
+ t h e R o o m B O
S t u d e n t C o n t r o l l e r
p e r f o r m ( )
D A O O b j e ct
a d d ( ), v o i d
d e l e t e ( ), v o i d
u p d a t e ( ), v o i d
q u e r y ( ), A r r a y L i st
+ t h e D A O O b j e c t
+ t h e D A O O b j e c t
S t u d e n t B O
a d d ( )
q u e r y ( )
u p d a t e ( )
d e l e t e ( )
S t u d e n t B O ( )
+ t h e S t u d e n t B O
+ t h e D A O O b j e c t
R o o m
R o o m ( )
se t r o o m _ i d ( )
g e t r o o m _ i d ( )
T e a ch e r
T e a ch e r ( )
se t t e a c h e r _ i d ( )
g e t t e a ch e r _ i d ( )
R o o m D A O
R o o m D A O ( )
a d d ( ), v o i d
d e l e t e ( ), v o i d
u p d a t e ( ), v o i d
q u e r y ( ), A r r a y L i st
+ t h e R o o m
T e a ch e r D A O
T e a ch e r D A O ( )
d e l e t e ( )
u p d a t e ( )
q u e r y ( )
a d d ( )
a d d ( )
d e l e t e ( )
u p d a t e ( )
q u e r y ( )
+ t h e T e a ch e r
S t u d e n t
se t st u d e n t _ i d ( )
g e t t e a ch e r _ i d ( )
C o n n e ct i o n P o o l
g e t C o n n e ct i o n ( ), C o n n e ct i o n
C o n n e ct i o n P o o l ( )
+ t h e C o n n e ct i o n P o o l
+ t h e C o n n e ct i o n P o o l
S t u d e n t D A O
a d d ( )
q u e r y ( )
u p d a t e ( )
d e l e t e ( )
+ t h e S t u d e n t
+ t h e C o n n e ct i o n P o o l
4.5.2.4 生成包与程序代码
对类进行检查操作:
生成程序代码: