用C#實現的數據庫抽象工廠(一)

用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>
public sealed 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;
}
}
}


待續......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章