基于UML 与三层架构的远程教育系统设计与实现

2012-07-02 01:46闫敏敏何向真万福成
关键词:用例页面架构

闫敏敏,何向真,马 宁,万福成

(西北民族大学中国民族语言文字信息技术国家民委—教育部重点实验室,兰州730030)

1 概述

随着网络技术的发展和远程教育应用的不断深入,传统的系统设计与分析方法已难以保证Web应用系统开发的效率和质量。UML作为一个软件建模的标准,目前在中国的使用已越来越广泛。在系统架构的选择上,Spring的控制倒置(IoC)和面向方面编程(AOP)在业务层有很大灵活性,与其他框架的整合可进行优势互补,能进一步提高系统的可重用性、可维护性、灵活性、封装性[1]。

基于UML建模方法能很好地支持Web应用系统建模,而且涵盖了从需求分析开始的软件开发的全过程;以Spring为核心整合的三层架构,可以提高系统质量和可靠性,并支持动态的业务需求。这两者的结合可以大大地减少前期投入,缩短开发时间。

2 选择系统体系结构

选择Freemarker+SpringMVC+Hibernate的主流技术架构,在SpringMVC的基础上独立出专门处理业务逻辑的类来实现三层架构的搭建。这种分层架构与基于UML的类的提取一一对应,促进了需求与设计的衔接,提高了开发效率。

系统的表示层是系统与用户交互的接口,在该Web系统中,表示层由嵌套了Freemarker标签的html页面构成,并通过Spring的分发器来实现与后台控制器的交互。业务层是由负责具体业务逻辑处理的类构成,针对控制器的要求来处理相应的业务,包括与持久层的交互,并将数据以model的形式返回给控制器。数据持久层主要采用Hibernate框架,实现对象/关系映射即O/R Mapping,对JDBC进行了对象封装,建立Java对象模型的持久对象[2]。在具体的应用过程中,在表示层通过添加一个分发器filter来实现对于请求的预处理,包括系统编码、系统登录时间设定及Session管理,通过实现Spring的适配器来定义自己的拦截器,用于处理和系统密切相关的用户权限,安全设置等。

三层架构的划分可以更好地进行层次化设计,能降低系统架构的耦合度,使系统维护起来更方便更容易,整合后的Web系统架构图可用图1表示。

3 基于UML的远程教育系统需求建模

用例驱动开发过程是UML的一大特色,需求建模的目的是用来说明系统需求,确定系统中的大多数角色和用例,从用户的角度描述系统功能,并建立起系统角色与用例的关联。

3.1 远程教育系统功能分析

在本系统中,用户主要由学生、教师、管理员组成。学生可以进行课程的浏览观看,可提交作业给相应教师,向相关老师提出问题,还能进行自我测试,有个人空间来管理个人信息,并能收藏喜欢的课程、试题、作业。教师主要负责学员及课程的管理,对学生提出的问题进行解答,对学生的作业进行查看并回复。系统管理员在系统中具有最高权限,提供系统正常运行的相关服务,负责所有用户的管理,对系统中不同的角色赋予相应的权限,对教师上传课程的检查,并发布新闻信息。资源管理员负责系统中所有资源的分类存储、检索、更新、删除等,对上传的资源进行审核,并根据系统管理员或教师的要求对资源进行相应的操作包括将资源上传到用户接口。

图1 基于SpringMVC的三层架构图

3.2 系统需求的用例表示

系统用例图提供了软件系统的高层次的用户视图,表示以外部参与者的角度来看系统的使用[3]。由前面的功能分析就可以画出整个系统的用例图,如图2所示。

对于复杂的用例,可以进行更为详细的描述,以指出开发过程中对系统用例更为清晰的要求。

课程学习模块的详细描述为:学员选择某个课程开始学习后,系统将引导学员开始课程学习,除了以Web形式展示的文本、图片及动画资料外,还直接支持视频课件的播放,并支持视频课件的快慢放、暂停,全屏播放等媒体播放的常用功能,在视频的播放中可以对观看的视频进行评价,用户还可以下载课程提供的资料附件帮助学习。

在详细描述的基础上,对用例的事件流进行描述,以便更加清楚系统应该做什么。

下面简要列出对课程内容添加的用例事件流。用例描述如下:用例标志号为001;用例名称为课程学习;简要说明,即学生在线查看相关课程的学习内容,以章、节为单位;前提条件是学生必须登录到系统且所选课程已被教师发布。

主事件流:(1)学生登录;(2)系统跳转到课程列表页面;(3)学生选择“观看课程”事件;(4)系统跳转到课程观看页面。

图2 系统用例图

3.3 用例细化

在得出系统顶层用例后,还需要对一些主要的用例进行细化,画出它们的子用例。在用例的基础上分化出系统的边界类、控制类及实体类,并通过序列图来描述说明各类之间的动态协作。在三层架构中,系统的边界类可以理解为表示层的视图页面,不包含业务逻辑,只完成界面的显示。控制类将表示层的请求交由相应的业务类来处理。实体类可由持久层的持久化类负责,完成与数据库的交互。以课程学习模块为例,其课程学习模块的顺序图如图3所示。

其中登录类作为系统的边界类负责用户与系统的交互,在登录界面将用户输入的个人信息提交给控制类,控制类由基于Spring注解的Action类来实现,对每个RequestMapping设置对应的处理方法。由控制类调用业务处理类即用户管理类,用户管理类从持久化类中获得用户存储在数据库中的数据,并将数据封装成实体类并返回到用户管理类,用户管理类以此判断用户的权限,经过验证后返回验证信息,并由控制类指向相应的操作界面。

图3 学生登录顺序图

4 基于UML的系统总体设计

根据分析模型,结合系统的体系结构及开发平台来构造设计阶段的序列图,并进一步构造出系统的类图。对于较为复杂的类图可建立细化的序列图,并在细化序列图的过程中根据需要增加新的方法或类。在迭代过程中使设计不断满足用例的需求。主要通过UML中的静态结构模型、动态行为模型等来表示。

4.1 系统的静态结构模型

静态结构模型描述了系统中重要对象的属性和操作以及这些对象之间的相互关系。建立用例图后,需要进一步识别出系统中存在的对象,然后再从对象中抽象出类,并确定共同的属性和操作;将它们都放在父类中,其他的可以作为子类,继承父类的属性和操作,同时可根据自己的实际情况添加自己特有的属性和操作,从而方便以后的开发和维护。

根据分析模型中的顺序图,得出设计阶段初始的类图(如图4)。该图表明,在该用例中主要包含3个实体类分别是学生类Student、教师类Teacher及课程类Course,指出了这3个实体类之间的相互关系及在程序中的引用。将UML分析得到的实体类图映射到关系数据库,是基于UML分析与设计中最重要的部分,也是系统实现的关键[4]。其具体流程是,当学生进入系统后首先进入到学生登录界面StudentLogin.html,在输入完登录信息后点击提交,在Spirng容器中将找到与请求URL相对应的注解类LoginAction的Login方法,由该方法调用管理类UserService的LoginValid方法来负责验证用户输入的信息。在LoginValid方法中包含一个UserDao的对象,通过学生的名字从数据库中读取相应的数据并通过Hibernate封装成一个学生类实体并返回。然后在此方法中将提交的密码与学生实体类的密码进行匹配,若成功则返回true。通过验证后,控制类调用用户管理类UserService的getTeacherList,得到该学生的教师列表,并通过调用课程管理类CourseService的getCourseList方法返回教师所有的课程,将数据以列表的形式存储在model中,并返回一个URL。并由Spring分发器中的SimpleFreeMarkerViewResolver来解析返回的地址,并跳转到课程列表页面CourseList.html。对于从课程列表页面到课程观看页面CourseView.html的导航,也是通过对应的CourseViewAction将业务逻辑交由课程管理类CourseService来处理,通过对应的CourseDao来负责课程实体类与数据库数据的交互。

4.2 系统的动态行为模型

通过对系统对象的静态分析,仍然不能很清楚地描述对象的行为和职责,还须进一步对系统进行动态的分析。动态行为模型由时序图、协作图、状态图和活动图来表达。在设计中对主要用例和对象类绘制这些图形,以便分析系统行为,验证和修改系统的静态结构,满足用户的需求,从而达到系统的预期目标。图5用顺序图描述了学生学习模块中从登录页面跳转到课程列表页面过程中,类之间的协作关系。

图4 学习模块静态结构图

图5 学生登录顺序图

5 系统功能模块的具体实现

根据研究内容中得出的系统的设计模型,就可以进行系统的开发。开发过程中涉及到开发平台的选择,软件过程的选取,并在此基础上进行系统的代码实现。类图是系统实现的主要依据。对于数据库表的存储可由Hibernate的O/R映射来实现实体类到表映射,对于较为复杂的数据库,要给出数据库的设计模型,指导实体类的设计。

5.1 基于SpringMVC+Freemarker的表示层的实现

本系统的表示层采用SpringMVC+Freemarker的方式,用来实现设计阶段得到的边界类。通过SpringMVC中的dispatcher将URL请求转向到对应的WebApplicationContext。由WebApplication-Context负责将模型、视图、控制器联系起来,并通过注解的方式来实现控制器对特定UML请求的处理。由控制器调用业务处理程序,处理完的数据返回给控制器,控制器将其放入到模板ModelMap对象中,通过返回的显示页面中的Freemarker标签实现对数据的提取及显示。其中dispatcher在Web.xml配置文件中声明,其对应的 WebApplication-Context由一个独立的配置文件来实现。dispatcher及WebApplicationContext的部分代码如下:

5.2 基于Spring框架的业务逻辑层的实现

业务逻辑层是由专门负责业务逻辑处理的类组成,包括对来自表示层的请求进行封装,数据的验证及处理。当涉及到数据库数据的存取时,可通过调用持久层的DAO类实现与数据库的交互。通过Spring的applicationContext来管理业务逻辑对象的生成,使用Spring注解来建立控制器、逻辑对象、持久化对象之间的调用关系。applicationContext.xml中部分代码如下:

5.3 基于Hibernate的数据持久层的实现

数据持久层是通过Hibernate模型来实现的。Hibernate框架的核心任务是根据hbm.xml文件配置信息建立实体对象与关系数据库二维表之间的映射[5]。通过SessionFactory对象来对实体类进行面向对象层面上的操作,通过ORM建立数据库表和类对象之间的映射关系,并使用JDBC数据库接口访问数据库。下面是学生实体类的映射文件:

5.4 系统部署

对于系统的最终部署,可采用配置图来表示系统的物理模型。配置图表示分布式系统的软件组件和硬件之间的关系,表达运行系统的结构。用来显示系统中计算结点的拓扑结构和通信路径与结点上运行的软构件等。能从宏观上清楚系统部署的软件硬件情况。系统采用B/S体系结构,由tomcat作为Web服务器,负责对Web页面的解析,应用服务器负责系统的业务处理,存储服务器采用IBM公司的DB2数据库,其配置如图6所示。

图6 系统配置图

6 结语

通过对远程教育系统的分析与设计,阐述了基于UML建模下的三层架构在开发远程教育系统中的应用,保证了系统从分析设计到实现的衔接,三层架构的应用有效地降低了层与层之间的依赖,减少了开发过程中开发人员之间的相互干扰。论文中重点涉及到的基于UML的建模方法,对于类似Web系统的开发有一定的参考意义。

[1]蒋纬,马光思.Spring与其他框架整合及流程分析[J].计算机工程,2007,33(14):79-81.

[2]Christian Bauer,Gavin King.Java Persistence with Hibernate[M].New York:MANNING,2006:157-190.

[3]Alistair Cockburn.Writing Effective Use Case[M].Boston MA:Addison-Wesley,2000:13-27.

[4]张念,陈薇.基于UML的面向对象数据库设计思想及在HR系统中的应用[J].计算机应用与软件,2009,26(8):138-140.

[5]高瞻,锁志海.基于Struts+Spring+Hibernate框架的网络评比系统[J].安徽计算机信息,2010,26(5-3):179-181.

猜你喜欢
用例页面架构
基于FPGA的RNN硬件加速架构
刷新生活的页面
UML用例间包含关系与泛化关系的比较与分析
UML用例模型中依赖关系的比较与分析
功能架构在电子电气架构开发中的应用和实践
联锁软件详细设计的测试需求分析和用例编写
從出土文獻用例看王氏父子校讀古書的得失
WebGIS架构下的地理信息系统构建研究
一种基于FPGA+ARM架构的μPMU实现
Web安全问答(3)