抽象工厂模式在数据库配置方面的应用

转载 2012年03月26日 13:41:19
      数据工厂主要是通过把数据库的连接做成一个抽象的工厂,如命名DALFactory,程序中所有的数据库连接都通过这个工厂类来产生,用来负责根据配置文件动态创建系统所需的数据访问逻辑对象。
  我们就拿PETSHOP来举例说明,PETSHOP在安装的时候,会提示我们选择什么数据库,如根据显示的是SQL Server数据库还是Oracle数据库,可以得到Web.config的节点中的
<add key=" WebDAL " value=" PetShop.SQLServerDAL "/>
<add key=" OrdersDAL " value=" PetShop.SQLServerDAL "/>
  或者是 
<add key=" WebDAL " value=" PetShop.OracleDAL "/>
<add key=" OrdersDAL " value=" PetShop. OracleDAL "/>
  然后在DALFactory项目的DataAccess类中调用数据库的连接,代码如下:
  private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];
  然后再看下面的代码:
        public static PetShop.IDAL.ICategory CreateCategory() {
            string className = path + ".Category";
            return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
        }
  如我们使用的是SQL Server,那么string className = path + ".Category"返回的就是PetShop.SQLServerDAL. Category,然后再用Assembly.Load加载PetShop.SQLServerDAL.DLL,同时创建PetShop.SQLServerDAL.Category的实例,并以接口(PetShop.IDAL.ICategory)类型返回。这样业务逻辑层BLL调用ICategory接口时就会用PetShop.SQLServerDAL.Category类的实现代码。
  这时候用户就不需要知道后台使用的到底是哪一种数据库,它只要调用接口就行了,在接口中定义了要使用的方法,当调用接口时会根据具体的情况再去调用底层数据访问操作。而现在这个DALFactory就是关键,当业务逻辑层要操作数据库时,DALFactory会根据具体情况再去使用生成的程序集SQLServerDAL或者OracleDAL中的一个,这样做的好处是对于业务逻辑层及WEB页面层的程序不会因为底层数据访问的程序变动而受到影响,因为只需要在业务逻辑层中调用接口就行了。
  有可能有人会提,我同样在工厂类里面提供下面的方法去实现调用数据库:
public static readonly DALFactory dalFa;
string webDal = ConfigurationManager.AppSettings["WebDAL"];
switch (webDal)
{
    case "SQLServerDAL":
        dalFa = new SqlServerDALFactory();
        break;
    case "OracleDAL":
        dalFa = new OracleDALFactory();
        break;
    default:
        dalFa = new SqlServerDALFactory();
        break;
}
  而这个时候如果我们增加了新的数据库访问方式,就必须得修改此部分的程序,然后再重新进行编译部署,而同样利用反射的机制去实现的时候,我们举个例子如果系统中现在需要增加MySQL数据库的时候,我们来看看它的代码的可扩展性,我们可以比较PETSHOP中的SQLServerDAL下面的Category.cs文件和OracleDAL下面的Category.cs文件的代码可知道,因为它们都继承了ICategory接口,所以类实现的方法都相同,这时候我们只需要增加一个MySqlDAL项目,其下面的Category.cs文件也同样遵循ICategory接口的方法,这时候我们再去修改为
  这个时候都不需要重新对项目进行编译,只需要增加MySqlDAL.DLL文件就可,无论增加多少数据库,都是一件很简单的操作,数据工厂操作多数据的优点就明显可见。
<add key=" WebDAL " value=" PetShop.SQLServerDAL "/>为<add key=" WebDAL " value=" PetShop.MySqlDAL "/>

相关文章推荐

抽象工厂模式

  • 2016年08月12日 06:56
  • 18KB
  • 下载

c++ java 抽象工厂模式代码

  • 2016年12月31日 19:20
  • 417KB
  • 下载

使用抽象工厂模式实现数据库替换管理 C++

说下对抽象工厂模式的理解: 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口, 而无需指定他们具体的类。 在抽象工厂的内部包含了所有产品创建的抽象方法, 也就是说, 每个工厂都会生产所有...

抽象工厂模式在数据访问层的应用

最近在修改一个项目,该项目需要将数据库移植重SQL Server移植到Oracle中。由于该项目的架构中没有抽象出数据访问层,而是将数据访问的方法耦合到业务逻辑中,因此在数据库移植过程中比较麻烦,需要...

C#初级抽象工厂模式用法示例

  • 2014年05月28日 16:47
  • 5KB
  • 下载

抽象工厂模式 - PHP版

  • 2014年05月28日 15:51
  • 7KB
  • 下载

抽象工厂模式+反射+配置文件

 配置文件+抽象工厂+反射 1 题目分析: 利用抽象工厂,实现数据库程序访问系统。使用配置文件加反射的方法。 2 UML:   3 代码: using System; usin...

抽象工厂模式

  • 2015年03月20日 15:24
  • 164KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象工厂模式在数据库配置方面的应用
举报原因:
原因补充:

(最多只允许输入30个字)