用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; } } }
待续......
|