练手之作:易元威客任务发布系统(2)

       昨天(http://www.cnblogs.com/arthur_wuancheng/archive/2008/10/20/1314946.html)把 易元威客的相关需求说了下 今天先来谈谈后端,

关于后端的需求主要达到这2条

         3.需要三层架构,适应未来扩展需求

         4.需要兼容不同的数据库,初步支持 mysql,oracle,mssql,access(结构上支持) 

我们先看看三层架构里面主要的项目  

1.数据实体类YYT.Entity

2.业务逻辑类 封装了 相关数据库操作 YYT.Data.MySql或YYT.Data.SqlServer

3.YYT.Data 数据访问层 主要是DBHelper2.0 以及利用反射 和类工厂构建的相关(mysql或sqlserver或其他数据库)访问类

以上三层 借鉴了Dnt论坛的一些源码 (后来看了一下论坛的源码也借鉴了一些网上的源码)

有关3的反射和类工厂有必要说一下首先在DatabaseProvider 提供了一个反射机制 从配置文件读取相关信息 反射并返回实例

 1         /// <summary>
 2         /// IDbProvider接口
 3         /// </summary>
 4         public static IDbProvider Provider
 5         {
 6             get
 7             {
 8                 if (m_provider == null)
 9                 {
10                     lock(lockHelper)
11                     {
12                         if (m_provider == null)
13                         {
14                             try
15                             {
16                                 m_provider = (IDbProvider)Activator.CreateInstance(Type.GetType(string.Format("YYT.Data.{0}Provider, YYT.Data.{0}", BaseConfigs.GetDbType), falsetrue));
17                             }
18                             catch
19                             {
20                                 throw new Exception("请检查YYT.config中Dbtype节点数据库类型是否正确,例如:SqlServer、Access、MySql");
21                             }
22                             
23                         }
24                     }
25                     
26                         //m_provider = new DbProviderFinder().GetDbProvider("accesss");
27             
28                     
29                 }
30                 return m_provider;
31             }
32         }
33 
34         /// <summary>
35         /// DbFactory实例
36         /// </summary>
37         public static DbProviderFactory Factory
38         {
39             get
40             {
41                 if (m_factory == null)
42                 {
43                     m_factory = Provider.Instance();
44                 }
45                 return m_factory;
46             }
47         }

 

在ExecuteDataset调用如下

 1         public static DataSet ExecuteDataset(DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters)
 2         {
 3             if (connection == nullthrow new ArgumentNullException("connection");
 4 
 5             // 预处理
 6             DbCommand cmd = Factory.CreateCommand();
 7             bool mustCloseConnection = false;
 8             PrepareCommand(cmd, connection, (DbTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
 9 
10             // 创建DbDataAdapter和DataSet.
11             using (DbDataAdapter da = Factory.CreateDataAdapter())
12             {
13                 da.SelectCommand = cmd;
14                 DataSet ds = new DataSet();
15                 
16                 
17                 
18                 // 填充DataSet.
19                 da.Fill(ds);
20 
21                 m_querycount++;
22                 
23                 cmd.Parameters.Clear();
24 
25 
26                 if (mustCloseConnection)
27                     connection.Close();
28 
29                 return ds;
30             }
31         }

 

posted on 2008-10-21 12:07  Arthur_wuancheng(大步牛)  阅读(673)  评论(7编辑  收藏  举报