上午结束了Struts最后的一节课后 ,并给学生们布置了一个课程设计;于是便开始想自己的想法有多少会被学生们接收。因为对于Struts框架本身而言只是一个开发框架,并没有具体的要求,虽然开发者会选择一些集成的软件开发工具来开发(如:Eclipse,JBuilder等);但是对于开发本身是一个完整的结构,开发工具只是提供了一个提高构建阶段效率的工具,开发框架也只是提供了一个设计期间可用的模式;对于软件开发依然需要一个系统化的过程才能实现软件。基于这个想法,我为我的学生们做了这个课程设计,希望他们可以体会到我的用意。
上午的时候由于昨天的意大利和澳大利亚的世界杯比赛,所以迟到了;不过学生们似乎习惯了我的迟到所以都在教室里等这我。我到了教室和他们闲聊一下昨天晚上(应该是今天早上凌晨)的比赛结果,然后进入正题布置我前几天准备的课程设计题目。其实此时我心里在想,这些学生们只接触了MVC设计模式和Struts不到2周是否能够真的理解Struts框架的意义。所以,对于这个课程设计的目标我定义的很清楚就是让他们体验一些如何设计一个软件,然后把主要精力集中在软件构建阶段(设计和修改软件接口,编码,测试,集成运行)。因此我这样划分了任务
-
2.介绍项目范围
-
业务流程
-
划分功能模块
-
了解模块设计
-
构建开发系统
-
项目测试&验收
-
总结
其中1~4阶段是软件的范围定义和分析设计,所以就由我自己来定义了。这个需要我所制作的幻灯片和我的讲解来达到让学生们可以体验一个软件设计的过程。
介绍项目范围
该课程设计是把一个项目审批系统的核心部分简化得到的一个原形,无论是业务流程还是程序逻辑都做了相应的简化,以保证学生可以在一天左右完成这个程序(事实上以我的经验一般一个勤快的学生一天最多也只愿意在课外花2~4小时在学习上)。程序范围如下:
系统包括两类用户使用该软件
1. 项目申请人
2. 项目审核人
项目申请人主要使用系统功能如下:
1. 提出项目申请
2. 管理项目申请信息
3. 项目预算分析
项目审核人主要使用系统功能如下:
1. 项目审批
2. 管理审批信息
3. 统计项目总体费用
事实上这里是一个用例描述,不过这里没有做用例图,因为我比较喜欢在上课的时候在白板上画用例。我始终觉得边画边讲会比先画好了再讲要好些;因为这样信息的传递过程中,学生不是处在一个被动过程,而是处在一个理解并接收的过程,当然这需要讲解过程中的一些沟通技巧。当然光靠一个用例就能把范围讲清楚,这个基本是很难做到的,因为对于Use-Case还需要搭配用例说明,所以这里还需要对每个用例功能做业务性的描述。
为了更好的描述这个业务过程,我做了一个业务流程图。这个业务流程图根据角色和任务以横向的角度来划分软件的流程。
接下来,就是对数据的分析,因为业务流程中,对于程序的处理主要是处理流程中的数据,所以下面做的事情就是设计E-R图和数据流图。如下图:
该E-R图所描述的数据结构,我们可以通过下面5张表格来说明:
表名: Projects
字段名 | 类型 | 约束 | 说明 | 备注 |
Pid | Char(20) | PK | 项目编号 |
|
UserId | Char(20) | Not Null | 用户ID |
|
PSubject | varChar(20) | Not Null | 项目名称 |
|
PDate | Datetime | Default now | 申请日期 |
|
Budgets | Decimal(10,2) | Default 0.0 | 项目预算 |
|
表说明: | 表示准备审批的项目 |
表名:Users
字段名 | 类型 | 约束 | 说明 | 备注 |
UserID | Char(20) | PK | 用户ID |
|
Password | Char(20) | Not Null | 密码 |
|
Prid | Char(10) | FK Not Null | 权限 |
|
表说明: | 表示用户,可以根据权限决定用户 |
表名:Priority
字段名 | 类型 | 约束 | 说明 | 备注 |
Prid | Char(10) | PK | 权限 |
|
|
|
|
|
|
表说明: | 表示用户权限 |
表名:Budgets
字段名 | 类型 | 约束 | 说明 | 备注 |
UserID | Char(20) | PK | 用户ID |
|
BID | Char(10) | PK | 预算编号 |
|
Money | Decimal(10,2) | Default 0.0 | 预算金额 |
|
表说明: | 表示每个用户的预算,一个预算可对应多个用户 |
表名:Audits
字段名 | 类型 | 约束 | 说明 | 备注 |
Pid | Char(20) | PK | 项目编号 |
|
Checked | Bit | Default false | 是否审批通过 |
|
表说明: | 表示审批项目 |
接下来我们把数据的在业务流程的流动中的转换过程通过数据流图进行描述,如下图:
项目申请数据流图
项目审批数据流图
以上是传统的信息化软件工程设计中经常用到的数据分析方法,通过上面的方法可以很清楚知道,软件要做那些事情;这些事情要使用那些数据;而这些数据又要被程序处理后已什么样的形式出现。可是这些设计完成了以后,用户也无法直接操作软件,所以此时根据我个人的经验我比较倾向与开始着手设计UI用户接口。我们再围绕这两个流程简单的设计两个页面,分别来处理这两个流程
这个页面用来做项目的申请工作,用户可以新建一个要申请的项目,删除一个已经申请但还没有批准的项目,如果项目已经批准则已红色显示并且无法做任何修改和删除工作,当然用户也可以选择一个还没有批准的项目做修改,然后保存。
该页面是由审核人使用的页面,用户可以通过打勾来确定那些项目可以审核通过,同时修改预算。
最后我们到了设计类图的阶段,这也是定义软件的功能模块的阶段。这里我们要结合Struts框架来做设计,也就是考虑MVC各个模块的设计接口,再类图设计的时候必须结合讲解每一个类和每一个方法完成什么功能和任务,上下层模块之间的接口是如何调用的。
最后预算一下这个工程要花多少事件,来完成也给学生们一个明确的任务界限
类名
|
开发时间
|
类名
|
开发时间
|
DBAccess
|
20 min
|
ProjectAction
|
30 min
|
Project
|
2 h
|
EditProjectAc
tion
|
20 min
|
User
|
20 min
|
DeleteProject
Action
|
10 min
|
Proposer
|
10 min
|
AuditAction
|
10 min
|
Assessor
|
1 h
|
PageSplitActi
on
|
20 min
|
ProjectForm
|
10 min
|
总计:
|
5.5 h
|
到此时,我已经花了近一个小时介绍这个课程设计,接下来我和我的学生们讨论一些细节问题;然后我就让他们准备上机实践,并准备验收。