知识大全 运用设计模式构建通用数据库访问类
Posted 数据库
篇首语:刑天舞干戚,猛志固常在。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 运用设计模式构建通用数据库访问类相关的知识,希望对你有一定的参考价值。
这就需要我们在实际开发过程中将这些数据库访问类再作一次封装 经过这样的封装 不仅可以达到上述的目标 还可以减少操作数据库的步骤 减少代码编写量 在这个方面 微软为我们提供了Application Block 但是 可惜的是目前只支持Sql Server 这里 介绍一种在实际应用中得到了非常好的效果的实作策略——笔者编写的Websharp框架中的数据访问结构 Factory设计模式是使用的主要方法 我们先来看看Factory的含义 定义一个用于创建对象的接口 让子类决定实例化哪一个类 Factory Method使一个类的实例化延迟到其子类 我们这里可能会处理对多种数据库的操作 因此 需要首先定义一个操纵数据库的接口 然后 根据数据库的不同 由类工厂决定实例化哪个类 下面 我们首先来定义这个访问接口 为了方便说明问题 我们在这里只列出了比较少的方法 其他的方法是很容易参照添加的 public interface DataAccess DatabaseType DatabaseTypeget; //数据库类型 IDbConnection DbConnectionget; //得到数据库连接 void Open(); //打开数据库连接 void Close(); //关闭数据库连接 IDbTransaction BeginTransaction(); //开始一个事务 int ExecuteNonQuery(string mandText); //执行Sql语句 DataSet ExecuteDataset(string mandText);//执行Sql 返回DataSet 因为 DataAccess的具体实现类有一些共同的方法 所以 先从DataAccess实现一个抽象的AbstractDataAccess类 包含一些公用方法 然后 我们分别为Sql Server Oracle和OleDb数据库编写三个数据访问的具体实现类 public sealed class MSSqlDataAccess : AbstractDataAccess ……//具体实现代码 public class OleDbDataAccess : AbstractDataAccess ……//具体实现代码 public class OracleDataAccess : AbstractDataAccess ……//具体实现代码 现在我们已经完成了所要的功能 下面 我们需要创建一个Factory类 来实现自动数据库切换的管理 这个类很简单 主要的功能就是根据数据库类型 返回适当的数据库操纵类 public sealed class DataAccessFactory private DataAccessFactory() private static PersistenceProperty defaultPersistenceProperty; public static PersistenceProperty DefaultPersistenceProperty getreturn defaultPersistenceProperty; setdefaultPersistenceProperty=value; public static DataAccess CreateDataAccess(PersistenceProperty pp) DataAccess dataAccess; switch(pp DatabaseType) case(DatabaseType MSSQLServer): dataAccess = new MSSqlDataAccess(pp ConnectionString); break; case(DatabaseType Oracle): dataAccess = new OracleDataAccess(pp ConnectionString); break; case(DatabaseType OleDBSupported): dataAccess = new OleDbDataAccess(pp ConnectionString); break; default: dataAccess=new MSSqlDataAccess(pp ConnectionString); break; return dataAccess;public static DataAccess CreateDataAccess() return CreateDataAccess(defaultPersistenceProperty); 好了 现在 一切都完成了 客户端在代码调用的时候 可能就是采用如下形式 PersistenceProperty pp = new PersistenceProperty();pp ConnectionString = \\ server= ;uid=sa;pwd=;database=Northwind;\\ ;pp DatabaseType = DatabaseType MSSQLServer;pp UserID = sa ;pp Password = ;DataAccess db= DataAccessFactory CreateDataAccess(pp)db Open();……//db 需要的操作db Close(); 或者 如果事先设定了DataAccessFactory的DefaultPersistenceProperty属性 可以直接使用DataAccess db= DataAccessFactory CreateDataAccess()方法创建DataAccess实例 当数据库发生变化的时候 只需要修改PersistenceProperty的值 客户端不会感觉到变化 也不用去关心 这样 实现了良好的封装性 当然 前提是 你在编写程序的时候 没有用到特定数据库的特性 例如 Sql Server的专用函数 cha138/Article/program/ASP/201311/21865相关参考