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

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

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

(1)AbstractDbFactory.cs

using System;
using System.Data;

namespace DbService
{
///

1<summary>   
2/// 数据库抽象工厂接口   
3/// </summary>

public interface AbstractDbFactory
{
///

1<summary>   
2/// 建立默认连接   
3/// </summary>

///

1<returns>数据库连接</returns>

IDbConnection CreateConnection();

///

1<summary>   
2/// 根据连接字符串建立Connection对象   
3/// </summary>

///

1<param name="strConn"/>

连接字符串
///

1<returns>Connection对象</returns>

IDbConnection CreateConnection(string strConn);

///

1<summary>   
2/// 建立Command对象   
3/// </summary>

///

1<returns>Command对象</returns>

IDbCommand CreateCommand();

///

1<summary>   
2/// 建立DataAdapter对象   
3/// </summary>

///

1<returns>DataAdapter对象</returns>

IDbDataAdapter CreateDataAdapter();

///

1<summary>   
2/// 根据Connection建立Transaction   
3/// </summary>

///

1<param name="myDbConnection"/>

Connection对象
///

1<returns>Transaction对象</returns>

IDbTransaction CreateTransaction(IDbConnection myDbConnection);

///

1<summary>   
2/// 根据Command建立DataReader   
3/// </summary>

///

1<param name="myDbCommand"/>

Command对象
///

1<returns>DataReader对象</returns>

IDataReader CreateDataReader(IDbCommand myDbCommand);

///

1<summary>   
2/// 获得连接字符串   
3/// </summary>

///

1<returns>连接字符串</returns>

string GetConnectionString();
}
}

(2)Factory.cs

using System;
using System.Configuration;

namespace DbService
{
///

1<summary>   
2/// Factory类   
3/// </summary>

public sealed class Factory
{
private static volatile Factory singleFactory = null;
private static object syncObj = new object();
///

1<summary>   
2/// Factory类构造函数   
3/// </summary>

private Factory()
{
}

///

1<summary>   
2/// 获得Factory类的实例   
3/// </summary>

///

1<returns>Factory类实例</returns>

public static Factory GetInstance()
{
if(singleFactory == null)
{
lock(syncObj)
{
if(singleFactory == null)
{
singleFactory = new Factory();
}
}
}
return singleFactory;
}

///

1<summary>   
2/// 建立Factory类实例   
3/// </summary>

///

1<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;
}
}
}

待续......

Published At
Categories with Web编程
Tagged with
comments powered by Disqus