梁红硕, 张玉松
(石家庄职业技术学院 信息工程系,河北 石家庄 050081)
在数据库管理系统开发中,三层体系架构设计模式是目前最通用的设计模式.分层结构的设计离不开设计模式的灵活应用,而设计模式一方面可以使系统开发者方便地复用成功的设计和体系结构,同时也使人更容易理解其设计思路.简单工厂模式是较简单也较常用的一种设计模式.本文主要探讨简单工厂模式在三层架构管理系统中的应用.
简单工厂模式(Simple Factory)也称为静态工厂模式(Static Factory Method),属于类的创建型模式.在该模式中,“消费者”提供信息给“工厂”,“工厂”根据“产品样式”生产出符合要求的“产品”[1].其中,“产品样式”是指“抽象商品”,也即基类或接口;“产品”是指“具体产品”,也即对象.简单工厂模式的实质就是有一个工厂类,它能根据传入参数的不同,动态决定创建哪个类的实例,而这些类均来自同一个父类或接口[2].该模式中包含的角色及职责如图1所示.
图1 简单工厂模式层次示意图
(1)工厂(Creator)角色
该类是简单工厂模式的核心,负责创建所有实例的内部逻辑.通过应用工厂类,可以封装商品的创建过程.
(2)抽象(Product)角色
简单工厂模式创建的所有对象的父类可以被看作具体产品的样式,它提供具体产品的主要规格.
(3)具体产品(Concrete Product)角色
利用简单工厂模式创建的所有目标对象,均可以认为是工厂创建的产品,可以提供给消费者使用.
目前典型的三层架构自底向上依次为:数据访问层、业务逻辑层和表示层.其中,数据访问层负责与SqlServer,Access等数据源交互,即进行数据的插入、修改、删除、查询以及从数据库中读取数据等操作,为实现业务逻辑提供数据库访问基础.业务逻辑层负责系统领域业务的处理,调用数据访问层,并力求满足表示层中每个逻辑功能的需求.表示层需要针对用户的需求,为每个功能模块部署相应的输入控件、操作控件、输出控件及调用业务逻辑层的相关方法,以实现与用户的输入、输出交互[3].
以三层学生选课管理系统为例,应用简单工厂模式,能够使该系统适用于多种数据库系统,如SqlServer,Access,Oracle,MySQL等.要访问不同的数据库管理系统,需要设计相应的数据访问层.在本文中分别设计了AceessDAL和SQLServerDAL两个数据访问层,以完成对Access数据库和SQLServer数据库的访问,这两个项目属于简单工厂模式中的具体产品角色.同时,设计了一个访问各个类的接口项目IDAL(数据访问接口),它包含以上两个数据访问层项目的所有数据,此项目即为简单工厂模式中的抽象角色.还设计了一个工厂类DALFactory,它根据输入参数的不同,决定生成哪个数据访问类的对象,此项目属于简单工厂模式中的工厂角色.应用简单工厂模式设计的系统体系架构如图2所示.
图2 应用简单工厂模式的系统体系架构图
2.2.1 设计IDAL
接口是用来定义多个类时都必须具备的,方式不同实现的功能也不同.IDAL接口中应定义AcceessDAL和SQLServerDAL两个类中都具备的方法.在DAL层,对数据库中的每张表设计一个类,以完成对数据的增加、删除、修改、查询等基本操作.因此,在IDAL中,对应DAL中的每个类均设计有一个接口,包含对其所有方法的定义,如图3所示.
其中,ICourseAccess(学生选课管理系统)接口的代码如下:
List<Course> GetCourseList();///获取课程列表
List<Course> GetCourse(string courseId);///获取某课程信息列表
bool Exist(string courseId);/// 根据课程号判断此课程是否存在
int AddCourse(Course course);///应用课程对象添加课程
int DelCourse(string courseId);///根据课程号删除课程
Course GetCourseModel(string courseId);///根据课程编号获取课程对象
图3 IDAL设计
2.2.2 设计工厂类DALFactory
工厂类要根据输入的参数决定生成哪个数据访问类的对象.其中,数据库的参数信息需要放在配置文件中,工厂类从配置文件中读取信息,获取参数.如果应用Access数据库,则需要在配置文件中添加如下信息:
<appSettings>
<!--当前使用的数据库系统Access/SqlServer-->
<add key="CurrentDBSystem"value="access"/>
</appSettings>
接下来需要在工厂类中设计静态方法以对应接口中的相应方法,并根据不同参数值创建相应数据访问类的对象.具体代码如下:
public static ICourseAccess CreatCourseAccess()
{
ICourseAccess courseAccess=null;
switch(currenDBSystem)
{
case"access":
courseAccess=new CourceManage_3.
AccessDAL.CourseAccess();
break;
case"sqlserver":
courseAccess=new CourceManage_
3.SQLServerDAL.CourseAccess();
break;
}
return courseAccess;
}
2.2.3 业务逻辑层实现
业务逻辑层调用数据层时,只需要调用工厂类的CreatCourseAccess()方法,创建当前数据库系统所需要的数据访问类对象,屏蔽底层业务.业务逻辑层并不知道数据对象是由哪个数据访问类创建的,即不论采用哪种数据库,对业务逻辑层、表示层均没有任何影响.
实现代码为:
ICourseAccess courAccess=classDALFactory.CreatCourseAccess().
基于简单工厂模式的三层体系架构,能降低模块间的耦合性,更好地实现软件的复用.它具有健壮性好、拓展性强和可移植性好的特点,能有效降低系统的建设和维护成本,并适应业务不断变化和更新的需求,符合大型商业软件的开发规范.
[1]段海清.基于NET平台的分层架构与设计模式的设计与实现[D].成都:电子科技大学,2013.
[2]马相芬.在三层结构中使用抽象工厂设计模式 [J].内江科技,2011(4):127.
[3]贾延明,张永涛.抽象工厂设计模式在MIS中的应用 [J].计算机系统应用,2011,20(1):205-207.