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

原创 2006年05月23日 23:58:00

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


待续......

抽象工厂实现多种数据库访问

  • 2009年06月24日 21:15
  • 27KB
  • 下载

C# 语言实现 抽象工厂 功能

  • 2008年08月31日 20:20
  • 23KB
  • 下载

三层架构之抽象工厂加反射----实现数据库转换

三层架构之抽象工厂加反射----实现数据库转换

抽象工厂实现多类型数据库

  • 2008年10月06日 14:11
  • 170KB
  • 下载

设计模式- 使用抽象工厂实现多数据库切换实现过程

目前我对设计模式方面了解的不多,会的设计模式五根手指头就能数完。怎么写好设计模式让读者看懂真的要讲究一下技巧,不能单纯的贴代码并对代码作解释,我觉的《大话设计模式》就是一本讲设计模式很好的书,那本书通...

机房重构 之 抽象工厂+反射+配置文件 实现数据库访问

重构机房已经开始三个多星期了,从刚开始的一头雾水,到现在的柳暗花明,由开始的无从下手,到现在感觉犹 如脱胎换骨了般。和两个星期前相比,现在明朗了多了,心情也好了不少。   先给大家看一下这次重构的整体...

三层架构之抽象工厂加反射----实现数据库转换

注意:文中代码有误,为保留历史痕迹在本文不做修改,正确代码详见《纠错》 在做系统的时候有意识的用到了抽象工厂这个设计模式,主要解决的是数据库更换的问题。 下面就以简单的登录来逐步的分析一下...

抽象工厂之数据库转换例子

  • 2009年07月24日 00:20
  • 40KB
  • 下载

C#设计模式:抽象工厂方法模式

今天说一下抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产出的具体产品是什么,这样一来,客户就从...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用C#实现的数据库抽象工厂(一)
举报原因:
原因补充:

(最多只允许输入30个字)