惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
量子位
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
B
Blog
U
Unit 42
C
Check Point Blog
I
InfoQ
aimingoo的专栏
aimingoo的专栏
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
云风的 BLOG
云风的 BLOG
宝玉的分享
宝玉的分享
爱范儿
爱范儿

博客园 - Arthur_wuancheng(大步牛)

练手之作:易元威客任务发布系统(1) 人生一世 草木一秋 如何进行高效的项目管理?(转) 项目管理的一点总结 极限编程法一点思考 WEB Service 下实现大数据量的传输 (转) 项目经验(转) Atlas 学习笔记: ajax 改进 by Atlas ajax for .net in vs2003 like gmail ^_^ 存储过程分页,以及动态sql(Sql server) C# 2.0 New Feature(1) WebService Enhancements 2.0 Learning Note ref type & out type Duwamish架构分析篇 (转) 程序编码应保持良好的规范(C#)(转) 也谈代码规范 (转) 如何用正确的方法来写出质量好的软件的75条体会 [转] How to Write to Database by EnterPriseLibrary2005 Logging Application Block(项目心得) 自己正在做电信的互联星空项目,里面用到的xml
练手之作:易元威客任务发布系统(2)
Arthur_wuancheng(大步牛) · 2008-10-21 · via 博客园 - Arthur_wuancheng(大步牛)

       昨天(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(大步牛)  阅读(705)  评论()    收藏  举报