现在的位置: 首页 > 综合 > 正文

一个抽象工厂数据访问模块(a data access component using abstract factory pattern SQL/OLEDB/ODBC)

2013年03月20日 ⁄ 综合 ⁄ 共 4931字 ⁄ 字号 评论关闭
来到这里已经半个月了,感谢MSTC不惜重金聘请MVP来教我们这48个菜鸟(整体素质之低有时候自己都觉得丢人),两本基础书籍的学习完成后,作为练笔,写了一个分布式的图书管理系统,规定时间10天,我用4天就搞定了,如果不是练玩带写的话,估计会更快。

这里第一次用到了自己的抽象工厂模式(Abstract Factory Pattern),但实际上却很失败——系统所有的数据访问基本上都要求用SP来做,这使得我的工厂形同虚设
但无论如何,还是写一下这个工厂吧:

首先是抽象工厂类(AbstractDbFactory.cs)

 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Data;
 5
 6namespace DAL
 7{
 8    /// <summary> 
 9    /// 数据库抽象工厂接口 
10    /// </summary> 

11    public interface AbstractDbFactory
12    {
13        /// <summary> 
14        /// 建立默认连接 
15        /// </summary> 
16        /// <returns>数据库连接</returns> 

17        IDbConnection CreateConnection();
18
19        /// <summary> 
20        /// 根据连接字符串建立Connection对象 
21        /// </summary> 
22        /// <param name="strConn">连接字符串</param> 
23        /// <returns>Connection对象</returns> 

24        IDbConnection CreateConnection(string strConn);
25
26        /// <summary> 
27        /// 建立Command对象 
28        /// </summary> 
29        /// <returns>Command对象</returns> 

30        IDbCommand CreateCommand();
31
32        /// <summary> 
33        /// 建立DataAdapter对象 
34        /// </summary> 
35        /// <returns>DataAdapter对象</returns> 

36        IDbDataAdapter CreateDataAdapter();
37
38        /// <summary> 
39        /// 根据Connection建立Transaction 
40        /// </summary> 
41        /// <param name="myDbConnection">Connection对象</param> 
42        /// <returns>Transaction对象</returns> 

43        IDbTransaction CreateTransaction(IDbConnection myDbConnection);
44
45        /// <summary> 
46        /// 根据Command建立DataReader 
47        /// </summary> 
48        /// <param name="myDbCommand">Command对象</param> 
49        /// <returns>DataReader对象</returns> 

50        IDataReader CreateDataReader(IDbCommand myDbCommand);
51
52        /// <summary>
53        /// 根据参数名和参数值建立DataParamter
54        /// </summary>
55        /// <param name="strProcName">参数名称</param>
56        /// <param name="value">参数值</param>
57        /// <returns>DataParamter对象</returns>

58        IDataParameter CreateDataParamter(string strParaName,object value);
59
60        /// <summary> 
61        /// 获得连接字符串 
62        /// </summary> 
63        /// <returns>连接字符串</returns> 

64        string GetConnectionString();
65    }

66}

然后是通用工厂接口(Factory.cs)

 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Configuration;
 5using System.Xml;
 6
 7namespace DAL
 8{
 9    /// <summary> 
10    /// Factory类 
11    /// </summary> 

12    public sealed class Factory
13    {
14        private static volatile Factory singleFactory = null;
15        private static object syncObj = new object();
16        /// <summary> 
17        /// Factory类构造函数 
18        /// </summary> 

19        private Factory()
20        {
21        }

22
23        /// <summary> 
24        /// 获得Factory类的实例 
25        /// </summary> 
26        /// <returns>Factory类实例</returns> 

27        public static Factory GetInstance()
28        {
29            if (singleFactory == null)
30            {
31                lock (syncObj)
32                {
33                    if (singleFactory == null)
34                    {
35                        singleFactory = new Factory();
36                    }

37                }

38            }

39            return singleFactory;
40        }

41
42        ///// <summary>
43        ///// Read confing
44        ///// </summary>
45        ///// <param name="appKey">参数</param>
46        ///// <returns></returns>

47        //public string GetConfigValue(string appKey)
48        //{
49        //    XmlDocument xDoc = new XmlDocument();
50        //    try
51        //    {
52        //        xDoc.Load(".//DAL.dll.config");
53        //        //xDoc.Load(System.Windows.Forms.Application.ExecutablePath+".config");
54        //        XmlNode xNode;
55        //        XmlElement xElem;
56        //        xNode = xDoc.SelectSingleNode("//appSettings");
57        //        xElem = (XmlElement)xNode.SelectSingleNode("//add[@key='" + appKey + "']");
58        //        if (xElem != null)
59        //            return xElem.GetAttribute("value");
60        //        else
61        //            return "";
62        //    }
63        //    catch (Exception)
64        //    {
65        //        return "";
66        //    }
67        //
68
69        /// <summary> 
70        /// 建立Factory类实例 
71        /// </summary> 
72        /// <returns>Factory类实例</returns> 

73        public AbstractDbFactory CreateInstance()
74        {
75            AbstractDbFactory abstractDbFactory = null;
76            switch (ConfigurationSettings.AppSettings["DatabaseType"].ToLower())
77            {
78                case "sqlserver":
79                    {
80                        abstractDbFactory = new SqlFactory();
81                        break;
82                    }

83                case "oledb":
84                    {
85                        abstractDbFactory = new OleDbFactory();
86                        break;
87                    }

88

抱歉!评论已关闭.