对于适于适于多种数据库访问抽象工厂方式学生

更新时间:2024-04-12 点赞:6201 浏览:18115 作者:用户投稿原创标记本站原创

摘 要: 本文将抽象工厂模式应用到WEB程序的数据库访问中,体现了抽象工厂模式高度封装性的优势,最大限度的实现了代码复用。
关键词:抽象工厂模式 WEB程序 数据访问层
多数WEB程序离不开数据库的访问,如何使软件设计适用于多种数据库的需求,以提高程序的扩展性和代码复用率,这是程序设计人员必然面临的问题。使用抽象工厂模式可以很好地解决该问题。

一、抽象工厂模式概述

抽象工厂模式是GoF的《Design Patterns》一书描述的创建型模式之一,是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式向具体产品提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

二、抽象工厂模式在WEB程序中的应用设计

为了使WEB程序适用于多种数据库,诸如SQL Server、ACCESS等,在数据访问层设计中使用抽象工厂模式。首先,设计抽象工厂类DataAccessFactory,该类根据用户需求创建具体的数据访问工厂,如:访问SQL Server数据库的SqlData工厂和访问ACCESS数据库的AccessData工厂;其次,由SqlData工厂和AccessData工厂分别创建具体的对象产品。用户在使用时无需关心自己使用的是什么工厂,通过统一的接口可以实现对不同数据库的访问。

(一)设计抽象工厂类DataAccessFactory

在DataAccessFactory类中包括获取数据库连接字符串和数据库类型的信息,并定义创建具体工厂类的方法。
默认数据库类型:public static readonly string ConnDatabaseType =ConfigurationManager.AppSettings["DatabaseType"];
数据库类型属性:DatabaseType DatabaseType{get;}
数据库连接对象属性:IDbConnection DbConnection{get;}
创建具体工厂类的方法:
public static DataAccess CreateDataAccess(){
DataAccess dataAccess; // DataAccess是提供数据库访问功能的接口
switch(ConnDatabaseType) {
case(DatabaseType.MSSQLServer):
dataAccess = new SqlDataAccess(pp.ConnectionString);
break;
case (DatabaseType.Oracle):
dataAccess = new OracleDataAccess(pp.ConnectionString);
break;
case (DatabaseType.OleDBSupported
dataAccess = new OleDbDataAccess(pp.ConnectionString);
break;}
return dataAccess; }
其中,DataAccess接口包括访问数据库的方法的定义,如:打开连接操作Open(),关闭连接操作 Close(),执行查询的操作DataSet ExecuteDataset(string commandType ,string commandText)及其重载方法等。
为了实现DataAccess接口中的Open方法和Close方法,定义了抽象类AbstractDataAccess。包括:
Open方法和Close方法的实现:
public void Open(){
if(this.DbConnection.State.Equals(ConnectionState.Closed))
this.DbConnection.Open();}
public void Close(){
if(this.DbConnection.State.Equals(ConnectionState.Open))
this.DbConnection.Close();}

(二)设计具体工厂类SqlData

SqlData类继承AbstractDataAccess,重写属性和操作数据库的方法。
public override DatabaseType DatabaseType{
get{return DatabaseType.MSSQLServer;} }

(三)数据访问层应用

下面以数据访问层中获取用户信息操作为例说明抽象工厂模式的应用。在该例中,用户不必关心使用何种类型的数据库,只要使用抽象工厂类创建工厂接口,由该接口操作数据库访问方法即可。
public System.Data.DataSet GetAllUsers(){
DataSet ds = null;
DataAccess dao = DataAccessFactory.CreateDataAccess();
try{ dao.Open();
ds = dao.ExecuteDataset(CommandType.StoredProcedure, SP_SELECT_USERS);
}
catch (Exception ex) {
throw new Exception(ex.Message); }
finally { dao.Close(); }
return ds;
}
三、结束语
将抽象工厂模式灵活的应用到WEB程序的数据访问层中可以实现多种数据库的访问,如需更换数据库,只需要修改web.config配置文件下中appSettings节中的信息即可,从而增强了软件的可扩展性,最大限度了实现了代码复用。源于:论文的写法www.618jyw.com
参考文献:
匿名.抽象工厂模式[EB/OL].(2012-09-01)[2011-1-8].http://baike.baidu.com/view/1580269.htm.
魏一搏,郭友.抽象工厂模式在NET数据访问层中的应用[J].信息系统工程,2010(2):59.
相关文章
推荐阅读

 发表评论

共有3000条评论 快来参与吧~