使用设计模式构建通用数据库访问类

WangmumuGuoJun

WangmumuGuoJun

2016-02-19 16:17

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的使用设计模式构建通用数据库访问类教程,一起来看看吧!超容易上手~

  在应用程序的设计中,数据库的访问是非常重要的,我们通常需要将对数据库的访问集中起来,以保证良好的封装性和可维护性。在.Net中,数据库的访问,对于微软自家的SqlServer和其他数据库(支持OleDb),采用不同的访问方法,这些类分别分布于System.Data.SqlClient和System.Data.OleDb名称空间中。微软后来又推出了专门用于访问Oracle数据库的类库。我们希

  望在编写应用系统的时候,不因这么多类的不同而受到影响,能够尽量做到数据库无关,当后台数据库发生变更的时候,不需要更改客户端的代码。

  这就需要我们在实际开发过程中将这些数据库访问类再作一次封装。经过这样的封装,不仅可以达到上述的目标,还可以减少操作数据库的步骤,减少代码编写量。在这个方面,微软为我们提供了Application Block,但是,可惜的是目前只支持Sql Server。这里,介绍一种在实际应用中得到了非常好的效果的实作策略笔者编写的Websharp框架中的数据访问结构。Factory设计模式是使用的主要方法。

  我们先来看看Factory的含义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。我们这里可能会处理对多种数据库的操作,因此,需要首先定义一个操纵数据库的接口,然后,根据数据库的不同,由类工厂决定实例化哪个类。

  下面,我们首先来定义这个访问接口。为了方便说明问题,我们在这里只列出了比较少的方法,其他的方法是很容易参照添加的。

  

public interface DataAccess{ DatabaseType DatabaseType{get;} //数据库类型 IDbConnection DbConnection{get;} //得到数据库连接 void Open(); //打开数据库连接 void Close(); //关闭数据库连接 IDbTransaction BeginTransaction(); //开始一个事务 int ExecuteNonQuery(string commandText); //执行Sql语句 DataSet ExecuteDataset(string commandText);//执行Sql,返回DataSet} 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  因为,DataAccess的具体实现类有一些共同的方法,所以,先从DataAccess实现一个抽象的AbstractDataAccess类,包含一些公用方法。然后,我们分别为Sql Server、Oracle和OleDb数据库编写三个数据访问的具体实现类:

  

public sealed class MSSqlDataAccess : AbstractDataAccess{ //具体实现代码。}public class OleDbDataAccess : AbstractDataAccess{ //具体实现代码。}public class OracleDataAccess : AbstractDataAccess{ //具体实现代码。} 

  现在我们已经完成了所要的功能,下面,我们需要创建一个Factory类,来实现自动数据库切换的管理。这个类很简单,主要的功能就是根据数据库类型,返回适当的数据库操纵类。

  

public sealed class DataAccessFactory{ private DataAccessFactory(){} private static PersistenceProperty defaultPersistenceProperty; public static PersistenceProperty DefaultPersistenceProperty {  get{return defaultPersistenceProperty;}  set{defaultPersistenceProperty=value;} }public static DataAccess CreateDataAccess(PersistenceProperty pp){ DataAccess dataAccess; switch(pp.DatabaseType) {  case(DatabaseType.MSSQLServer):   dataAccess = new MSSqlDataAccess(pp.ConnectionString);   break;  case(DatabaseType.Oracle):   dataAccess = new OracleDataAccess(pp.ConnectionString);   break;  case(DatabaseType.OleDBSupported):   dataAccess = new OleDbDataAccess(pp.ConnectionString);   break;  default:   dataAccess=new MSSqlDataAccess(pp.ConnectionString);   break; } return dataAccess;}public static DataAccess CreateDataAccess(){ return CreateDataAccess(defaultPersistenceProperty);}}

  好了,现在,一切都完成了,客户端在代码调用的时候,可能就是采用如下形式:

  

PersistenceProperty pp = new PersistenceProperty();pp.ConnectionString = "server=127.0.0.1;uid=sa;pwd=;database=Northwind;";pp.DatabaseType = DatabaseType. MSSQLServer;pp.UserID = sa;pp.Password = ;DataAccess db= DataAccessFactory.CreateDataAccess(pp)db.Open();//db.需要的操作db.Close();

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  或者,如果事先设定了DataAccessFactory的DefaultPersistenceProperty属性,可以直接使用

  DataAccess db= DataAccessFactory.CreateDataAccess()方法创建DataAccess实例。

  当数据库发生变化的时候,只需要修改PersistenceProperty的值,客户端不会感觉到变化,也不用去关心。这样,实现了良好的封装性。当然,前提是,你在编写程序的时候,没有用到特定数据库的特性,例如,Sql Server的专用函数。

  以上,介绍了一种通用数据库操作类的实现设计方法,希望能够对大家有所启发。

展开更多 50%)
分享

猜你喜欢

使用设计模式构建通用数据库访问类

编程语言 网络编程
使用设计模式构建通用数据库访问类

Mysql 数据库访问类

编程语言 网络编程
Mysql 数据库访问类

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

使用JDBC创建数据库访问程序

编程语言 网络编程
使用JDBC创建数据库访问程序

使用ADO.NET访问数据库

电脑网络
使用ADO.NET访问数据库

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何使用JSP访问MySQL数据库

Java JAVA基础
如何使用JSP访问MySQL数据库

使用MIDAS访问远程Access数据库

编程语言 网络编程
使用MIDAS访问远程Access数据库

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

vc++中进程与多进程管理的方法

vc++中进程与多进程管理的方法

js基础:限量版广告 1个IP一天只弹一次的AD代码

js基础:限量版广告 1个IP一天只弹一次的AD代码
下拉加载更多内容 ↓