.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
用C#实现的数据库抽象工厂(一)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

待续......




相关文章

相关软件