用C#实现的数据库抽象工厂(一)

http://tech.ddvip.com   2007年10月05日    社区交流

内容摘要:本文介绍用C#实现的数据库抽象工厂

  最近学习了一下设计模式,便尝试用C#对数据库的访问操作采用抽象工厂的模式实现一下,其中与标准的模式略有不同,加入了一些自己的想法,希望大家批评指正,代码共分为6个类:

  (1)AbstractDbFactory.cs

using System;
using System.Data;
  
namespace DbService
{
/// <summary>
/// 数据库抽象工厂接口
/// </summary>
public interface AbstractDbFactory
{
 /// <summary>
 /// 建立默认连接
 /// </summary>
 /// <returns>数据库连接</returns>
 IDbConnection CreateConnection();
  
 /// <summary>
 /// 根据连接字符串建立Connection对象
 /// </summary>
 /// <param name="strConn">连接字符串</param>
 /// <returns>Connection对象</returns>
 IDbConnection CreateConnection(string strConn);
  
 /// <summary>
 /// 建立Command对象
 /// </summary>
 /// <returns>Command对象</returns>
 IDbCommand CreateCommand();
  
 /// <summary>
 ///建立DataAdapter对象
 /// </summary>
 /// <returns>DataAdapter对象</returns>
 IDbDataAdapter CreateDataAdapter();
  
 /// <summary>
 /// 根据Connection建立Transaction
 /// </summary>
 /// <param name="myDbConnection">Connection对象</param>
 /// <returns>Transaction对象</returns>
 IDbTransaction CreateTransaction(IDbConnection myDbConnection);
  
 /// <summary>
 /// 根据Command建立DataReader
 /// </summary>
 /// <param name="myDbCommand">Command对象</param>
 /// <returns>DataReader对象</returns>
 IDataReader CreateDataReader(IDbCommand myDbCommand);
  
 /// <summary>
 /// 获得连接字符串
 /// </summary>
 /// <returns>连接字符串</returns>
 string GetConnectionString();
}
}

  (2)Factory.cs

using System;
using System.Configuration;
  
namespace DbService
{
/// <summary>
/// Factory类
/// </summary>
publicsealed class Factory
{
 private static volatile Factory singleFactory = null;
 private static object syncObj = new object();
 /// <summary>
 /// Factory类构造函数
 /// </summary>
 private Factory()
 {
 }
  
 /// <summary>
 /// 获得Factory类的实例
 /// </summary>
 /// <returns>Factory类实例</returns>
 public static Factory GetInstance()
 {
 if(singleFactory == null)
 {
  lock(syncObj)
  {
  if(singleFactory == null)
  {
   singleFactory = new Factory();
  }
  }
 }
 return singleFactory;
 }
  
 /// <summary>
 /// 建立Factory类实例
 /// </summary>
 /// <returns>Factory类实例</returns>
 public AbstractDbFactory CreateInstance()
 {
 AbstractDbFactory abstractDbFactory = null;
 switch(ConfigurationSettings.AppSettings["DatabaseType"].ToLower())
 {
  case "sqlserver":
  {
  abstractDbFactory = new SqlFactory();
  break;
  }
  case "oledb":
  {
  abstractDbFactory = new OleDbFactory();
  break;
  }
  case "odbc":
  {
  abstractDbFactory = new OdbcFactory();
  break;
  }
 } 
 return abstractDbFactory;
 }
}
}

  待续......

责编:豆豆技术应用

正在加载评论...