论文部分内容阅读
摘 要: 指出使用设计模式设计和开发框架的必要性。分析若干设计模式在在线测试系统框架中的应用,总结在线测试系统框架的设计方法,给在线测试系统框架的设计提供指导。
关键词: 设计模式;在线测试系统;框架设计
中图分类号:F560 文献标识码:A 文章编号:1671-7597(2012)0610081-02
0 引言
本文描述了一个面向对象的在线测试系统框架,该框架运用了面向对象设计模式,构建形成了一个面向对象框架,使用一种常用的方法模型化了系统的复杂概念并详细描述了框架中层与层之间的协作关系。
1 设计模式与框架技术
模式(Pattern)概念是早在二十世纪七十年代由建筑大师Christopher Alexander提出应用于建筑领域的,Ward Cunningham和Kent Beck在八十年代中期将其思想引入到了软件领域。
设计模式方便复用以往成功的设计和体系结构,把它们用到框架中可以很好地吸收那些体现在模式中的宝贵经验,掌握设计模式可以使开发者对面向对象的设计思想有更深刻的理解。而且,这些模式可以直接指导面向对象系统中的关键建模问题,对于类似的问题背景可以直接套用。也就是说,使用设计模式能增强被包装类的复用程度,能够较好地应对需求变更,还可以减少类的藕合和依赖。
2 在线测试系统框架面对的问题
框架是可复用的半成品程序,对框架加以补充定制可以输出满足具体需求的应用。通用在线测试系统必须能适应系统业务逻辑的变化,能满足使用不同试题库的要求,而且界面也必须容易调整,才能适应不同用户要求。
因此我们有必要建立一个能减少分析设计工作,并能方便在其基础上复用和减少代码量的系统框架。
3 逻辑层设计
逻辑层是系统中需求最易产生变化的层。为较好地处理系统对象间存在的依赖关系,可以将其分为外观层、业务逻辑层、持久化层和实体层。
外观层的作用是隔离,目的是界面与功能的实现分开。
业务逻辑层处理业务规则和逻辑的实现。
持久化层为业务逻辑层提供数据访问服务。持久化层与数据库进行,实现数据增删改查。
实体层是业务数据各层间传递信息的数据集。
3.1 设计实体层
实体代表了业务对象在系统中的独立表达。简而言之:一个业务实体可以对应数据库表中一个或多个表,其属性基本取自这些表字段。
我们先定义测试数据类作为所有实体类的框架类,再添加一些方法,每个类的结构用XML文件表示。实体对象根据XML文件由构造器在运行时生成。这里使用了生成器设计模式和工厂方法设计模式。
生成器又名建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。有时候我们需要创建复杂对象算法,并使独立于该对象的构成部分以及它们的装配方式;有时候我们的构造过程需要允许被构造对象有不同的表示,这些情况都比较适合采用生成器模式。
工厂方法相对简单,而且应用很普遍。我们先定义一个创建产品对象的工厂接口,然后将实际创建动作延迟到子类里。核心工厂类不需要负责产品创建,它是一个抽象工厂角色,只负责具体子类必须实现的接口,这样抽象化的工厂方法模式可以使系统在不修改具体工厂角色的前提下引进新产品。工厂方法可以使类的实例化延迟到其子类。这样就不用把应用类绑定到代码中,降低了系统耦合度。
3.1.1 协作
用户登录后会生成考生对象,系统会把用户在线测试唯一标识通过消息传递给测试工厂类创建测试对象;测试对象包括规则编号,把规则编号传递给测试工厂创建出题规则对象,然后由测试对象(指导者)出题。生成器控制生成试卷。第一步按试卷的不同要求生成试题对象;第二步根据试题对象生成答题卡。
3.1.2 扩展
1)变更在线测试题目参数不可能每次都改源代码,改变数据库中记录来生成新的出题规则就可以了;如果新增了约束条件或算法,也只要从出题规则类中继承新子类就可以了,这里应用的是策略模式。
策略模式的应用也很常见。我们先定义一系列算法,同时将每个算法封装起来,并使它们可以相互替代。
策略模式适用的情况:多个类只区别在功能不同,需要在运行时动态决定要执行哪套功能;需要在不同条件时应用不同的算法(也就是策略),或者策略会在将来有所扩展;对客户隐藏具体算法细节。
2)修改测试形式需要编写新的出题规则类并修改测试工厂类的工厂方法。
3)新增测试科目意味着新题库,需要生成新的测试类,还要修改测试工厂类的工厂方法,与原规则对象组合形成新试卷对象。
3.2 Web层的设计
Web层与外观层的设计实现了MVC模式。MVC模式本来是应用于桌面应用的,其中三个字母分别代表数据模型、用户界面和控制器。MVC模式的目的是将数据和用户试图的代码实现分开解耦,同一应用逻辑可以展现为不同的用户界面。该模式自八十年代在Smalltalk中提出以来,已被许许多多面向对象设计广泛使用,并且受到越来越多的开发者的欢迎。
本系统中测试页面是与用户交互的Web页面,其中包括各题型界面控件,试卷页面代表使用的数据,包括所有试题。
3.2.1 协作
1)当在线测试开始时,首先从试卷对象获取试题,然后初始化试题显示控件,它将设置状态和外观。最后会把页面转换成网页。
2)如果需要更新测试状态,可以向测试页面发送消息,它会从试题显示控件取得答案,然后给试卷对象发送消息。
3.2.2 扩展
为了给以后增加新题库预留接口,考虑了几种扩展:
1)修改试卷的界面展现,只要修改页面中的样式脚本,或者修改网页相关的CSS文件即可,系统不用重新编译。
2)增加新的试题类型,需要添加存放数据的试题类显示控件,并用来展现试题。 3.3 外观层的设计
外观层为Web层提供处理、浏览和操作的界面(这里指的是代码处理)。它的作用是隔离,将用户界面与业务功能的实现分开。
我们用Facade(外观)设计模式设计外观层与Web层之间的交互。外观层就是Facade,它为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。即当子系统复杂或者繁锁时,我们让子系统提供一个窗口,程序中称为接口,其它程序或者对象就通过这个窗口(接口)与此子系统联系。接口可以是类或方法等。这样就简化了子系统的使用。
通过高度抽象,这里将外观层划分为 AccountSystem类、PaperSystem类、QuestionSystem类,每个类负责相关业务逻辑规则层和持久化层的调用。由Facade来负责管理系统内部类的调用。当Web请求发生时,由业务外观层确定访问持久化层,还是先和业务逻辑层交互。
3.4 持久化层的设计
持久化层的功能主要利用了.NET提供的数据处理设计。
ADO.NET是向.NET程序员公开数据访问服务的一组类。ADO.NET将数据访问分解为多个可以单独使用的不连续组件。ADO.NET包含连接数据库、执行SQL命令、查询结果的数据提供程序。ADO.NET是.NET框架的重要部分,相关类都封装在System.Data.dll中。
使用ADO.NET,开发时可以把查询的结果放到DataSet。DataSet是保存和传递多数据源数据的核心组件,它可以与多种来源的数据或在架构层次之间进行处理的数据进行组合,并向用户公开。DataSet对象还可以脱离ADO.NET数据提供程序使用。
DataSet的设计目就是为了实现独立于数据源种类访问数据。它包含多个(也可以是一个)DataTable对象。
ADO.NET的另一个重要部分是数据提供程序Data Provider。其中包括提供与数据源连接的Connection对象;用于执行sql语句、运行存储过程等数据库命令的Command对象;还有从数据源中提供只读数据流的DataReader对象;提供连接DataSet对象和数据源桥梁的DataAdapter对象。
4 结论
本文所提出来的在线测试系统框架,通过面向对象的方法把系统分割成了多个层,使用设计模式对对象之间接口进行了设计,整个系统是由低耦合的,可重用的对象组合而成,降低了系统维护和二次开发成本。
采用以上框架实现的测试系统增加了系统的可重用性,改善了系统的可维护性并且减少了开发的复杂度。该项研究成果可以应用于联机测试系统产品的开发。
参考文献:
[1]保罗.克莱门茨、孙学涛,软件构架实践[M .北京:清华大学出版社,2002.
[2]Erich Gamma,Richard Helm,Ralph Johnson et al. Design Patterns:Elements of Reusable Object-Oriented Software[M].Massachusetts:
Addison Wesley Publishing Company,1995.
[3]阎宏,Java与模式[M].北京:电子工业出版社,2002.
关键词: 设计模式;在线测试系统;框架设计
中图分类号:F560 文献标识码:A 文章编号:1671-7597(2012)0610081-02
0 引言
本文描述了一个面向对象的在线测试系统框架,该框架运用了面向对象设计模式,构建形成了一个面向对象框架,使用一种常用的方法模型化了系统的复杂概念并详细描述了框架中层与层之间的协作关系。
1 设计模式与框架技术
模式(Pattern)概念是早在二十世纪七十年代由建筑大师Christopher Alexander提出应用于建筑领域的,Ward Cunningham和Kent Beck在八十年代中期将其思想引入到了软件领域。
设计模式方便复用以往成功的设计和体系结构,把它们用到框架中可以很好地吸收那些体现在模式中的宝贵经验,掌握设计模式可以使开发者对面向对象的设计思想有更深刻的理解。而且,这些模式可以直接指导面向对象系统中的关键建模问题,对于类似的问题背景可以直接套用。也就是说,使用设计模式能增强被包装类的复用程度,能够较好地应对需求变更,还可以减少类的藕合和依赖。
2 在线测试系统框架面对的问题
框架是可复用的半成品程序,对框架加以补充定制可以输出满足具体需求的应用。通用在线测试系统必须能适应系统业务逻辑的变化,能满足使用不同试题库的要求,而且界面也必须容易调整,才能适应不同用户要求。
因此我们有必要建立一个能减少分析设计工作,并能方便在其基础上复用和减少代码量的系统框架。
3 逻辑层设计
逻辑层是系统中需求最易产生变化的层。为较好地处理系统对象间存在的依赖关系,可以将其分为外观层、业务逻辑层、持久化层和实体层。
外观层的作用是隔离,目的是界面与功能的实现分开。
业务逻辑层处理业务规则和逻辑的实现。
持久化层为业务逻辑层提供数据访问服务。持久化层与数据库进行,实现数据增删改查。
实体层是业务数据各层间传递信息的数据集。
3.1 设计实体层
实体代表了业务对象在系统中的独立表达。简而言之:一个业务实体可以对应数据库表中一个或多个表,其属性基本取自这些表字段。
我们先定义测试数据类作为所有实体类的框架类,再添加一些方法,每个类的结构用XML文件表示。实体对象根据XML文件由构造器在运行时生成。这里使用了生成器设计模式和工厂方法设计模式。
生成器又名建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。有时候我们需要创建复杂对象算法,并使独立于该对象的构成部分以及它们的装配方式;有时候我们的构造过程需要允许被构造对象有不同的表示,这些情况都比较适合采用生成器模式。
工厂方法相对简单,而且应用很普遍。我们先定义一个创建产品对象的工厂接口,然后将实际创建动作延迟到子类里。核心工厂类不需要负责产品创建,它是一个抽象工厂角色,只负责具体子类必须实现的接口,这样抽象化的工厂方法模式可以使系统在不修改具体工厂角色的前提下引进新产品。工厂方法可以使类的实例化延迟到其子类。这样就不用把应用类绑定到代码中,降低了系统耦合度。
3.1.1 协作
用户登录后会生成考生对象,系统会把用户在线测试唯一标识通过消息传递给测试工厂类创建测试对象;测试对象包括规则编号,把规则编号传递给测试工厂创建出题规则对象,然后由测试对象(指导者)出题。生成器控制生成试卷。第一步按试卷的不同要求生成试题对象;第二步根据试题对象生成答题卡。
3.1.2 扩展
1)变更在线测试题目参数不可能每次都改源代码,改变数据库中记录来生成新的出题规则就可以了;如果新增了约束条件或算法,也只要从出题规则类中继承新子类就可以了,这里应用的是策略模式。
策略模式的应用也很常见。我们先定义一系列算法,同时将每个算法封装起来,并使它们可以相互替代。
策略模式适用的情况:多个类只区别在功能不同,需要在运行时动态决定要执行哪套功能;需要在不同条件时应用不同的算法(也就是策略),或者策略会在将来有所扩展;对客户隐藏具体算法细节。
2)修改测试形式需要编写新的出题规则类并修改测试工厂类的工厂方法。
3)新增测试科目意味着新题库,需要生成新的测试类,还要修改测试工厂类的工厂方法,与原规则对象组合形成新试卷对象。
3.2 Web层的设计
Web层与外观层的设计实现了MVC模式。MVC模式本来是应用于桌面应用的,其中三个字母分别代表数据模型、用户界面和控制器。MVC模式的目的是将数据和用户试图的代码实现分开解耦,同一应用逻辑可以展现为不同的用户界面。该模式自八十年代在Smalltalk中提出以来,已被许许多多面向对象设计广泛使用,并且受到越来越多的开发者的欢迎。
本系统中测试页面是与用户交互的Web页面,其中包括各题型界面控件,试卷页面代表使用的数据,包括所有试题。
3.2.1 协作
1)当在线测试开始时,首先从试卷对象获取试题,然后初始化试题显示控件,它将设置状态和外观。最后会把页面转换成网页。
2)如果需要更新测试状态,可以向测试页面发送消息,它会从试题显示控件取得答案,然后给试卷对象发送消息。
3.2.2 扩展
为了给以后增加新题库预留接口,考虑了几种扩展:
1)修改试卷的界面展现,只要修改页面中的样式脚本,或者修改网页相关的CSS文件即可,系统不用重新编译。
2)增加新的试题类型,需要添加存放数据的试题类显示控件,并用来展现试题。 3.3 外观层的设计
外观层为Web层提供处理、浏览和操作的界面(这里指的是代码处理)。它的作用是隔离,将用户界面与业务功能的实现分开。
我们用Facade(外观)设计模式设计外观层与Web层之间的交互。外观层就是Facade,它为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。即当子系统复杂或者繁锁时,我们让子系统提供一个窗口,程序中称为接口,其它程序或者对象就通过这个窗口(接口)与此子系统联系。接口可以是类或方法等。这样就简化了子系统的使用。
通过高度抽象,这里将外观层划分为 AccountSystem类、PaperSystem类、QuestionSystem类,每个类负责相关业务逻辑规则层和持久化层的调用。由Facade来负责管理系统内部类的调用。当Web请求发生时,由业务外观层确定访问持久化层,还是先和业务逻辑层交互。
3.4 持久化层的设计
持久化层的功能主要利用了.NET提供的数据处理设计。
ADO.NET是向.NET程序员公开数据访问服务的一组类。ADO.NET将数据访问分解为多个可以单独使用的不连续组件。ADO.NET包含连接数据库、执行SQL命令、查询结果的数据提供程序。ADO.NET是.NET框架的重要部分,相关类都封装在System.Data.dll中。
使用ADO.NET,开发时可以把查询的结果放到DataSet。DataSet是保存和传递多数据源数据的核心组件,它可以与多种来源的数据或在架构层次之间进行处理的数据进行组合,并向用户公开。DataSet对象还可以脱离ADO.NET数据提供程序使用。
DataSet的设计目就是为了实现独立于数据源种类访问数据。它包含多个(也可以是一个)DataTable对象。
ADO.NET的另一个重要部分是数据提供程序Data Provider。其中包括提供与数据源连接的Connection对象;用于执行sql语句、运行存储过程等数据库命令的Command对象;还有从数据源中提供只读数据流的DataReader对象;提供连接DataSet对象和数据源桥梁的DataAdapter对象。
4 结论
本文所提出来的在线测试系统框架,通过面向对象的方法把系统分割成了多个层,使用设计模式对对象之间接口进行了设计,整个系统是由低耦合的,可重用的对象组合而成,降低了系统维护和二次开发成本。
采用以上框架实现的测试系统增加了系统的可重用性,改善了系统的可维护性并且减少了开发的复杂度。该项研究成果可以应用于联机测试系统产品的开发。
参考文献:
[1]保罗.克莱门茨、孙学涛,软件构架实践[M .北京:清华大学出版社,2002.
[2]Erich Gamma,Richard Helm,Ralph Johnson et al. Design Patterns:Elements of Reusable Object-Oriented Software[M].Massachusetts:
Addison Wesley Publishing Company,1995.
[3]阎宏,Java与模式[M].北京:电子工业出版社,2002.