如何利用抽象工厂更换数据库
来源:互联网 发布:淘宝后台客服电话 编辑:程序博客网 时间:2024/06/05 20:14
VS中我们都加入了抽象工厂模式,都懂的这种模式可以用来更换数据库。具体应用起来大家都知道应用反射,首先我介绍下我的情况吧。
现在的情况是我的D层程序集和命名空间都为DAL,D层的类也都是以Sql为前缀来命名,例如SqlCancelCardDAL,在工厂中,我的代码时这么写的,大家可以看一下:
Imports DFactoryImports IDALImports System.ReflectionImports System.ConfigurationPublic Class DataAccess Private ReadOnly assemblyName As String = "DAL" Dim strDB As String = System.Configuration.ConfigurationSettings.AppSettings("DB") '返回一个IStudent接口 Public Function CheckStuID() As IStudent Dim ClassName As String = assemblyName + "." + strDB + "StuInfoDAL" Return CType(Assembly.Load("DAL").CreateInstance(ClassName), IStudent) End Function '返回注册接口IRegist Public Function AboutRegist() As IRegist Dim ClassName As String = assemblyName + "." + strDB + "RegistDAL" Return CType(Assembly.Load("DAL").CreateInstance(ClassName), IRegist) End Function '返回充值接口ICharge Public Function InsertInfo() As ICharge Dim ClassName As String = assemblyName + "." + strDB + "ChargeDAL" Return CType(Assembly.Load("DAL").CreateInstance(ClassName), ICharge) End Function ...... End Class
App.config中反射为:
<add key="DB" value="Sql"/>改变为<add key="DB" value="Oracle"/>
接着想,我们原来的命名空间跟改变的OracleDAO命名空间完全不一样,看一下原来的工厂代码这样写的:
Private ReadOnly assemblyName As String = "DAL"
这样就在程序里把命名空间给写死了,但是我们同样可以利用反射的原理将命名空间移动到XML中,不需要打开VS来看,因为我们的运行都是从项目文件中UI层Debug开始的,所以只需在UI\bin\Debug\UI.exe.config中添加一句:
<add key="MM" value="OracleDAO"/>
同时在工厂层中将写死的命名空间那句改为:
Private ReadOnly assemblyName = System.Configuration.ConfigurationSettings.AppSettings("MM")
最后一步就是:将每个方法中的return句中“DAL”改为assemblyName即为完美。
这样我们的程序如何更改数据库只需在配置文件中更改命名空间和反射中类的前缀即可,这样就充分运用了抽象工厂+反射,实现更换数据库的功能。
- 如何利用抽象工厂更换数据库
- 如何利用抽象工厂更换数据库
- 在Web.config中配置数据库连接(利用抽象工厂方便更换数据库)
- 如何应对数据库更换(三层架构+抽象工厂+反射+配置文件)
- 抽象工厂之更换皮肤
- 利用抽象工厂模式连接不同的数据库
- 抽象工厂实现数据库切换
- 抽象工厂模式,BLL层如何使用工厂的代码?
- 反射机制剖析(二): 利用抽象工厂实现BeanFactory
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- What is different between ClassLoader.getResourceAsStream() and Class.getResourceAsStream()?
- Oracle Database 11gR2:面向 DBA 和开发人员的重要特性
- 网页中常用的剪切、全选等代码
- 【jiasuba】更改文件打开方式最简单的两种方法
- JavaScript实现 页面滚动图片加载
- 如何利用抽象工厂更换数据库
- redo log的管理
- source insight 宏
- Cocos2D: Additive Coloring & Flash Style Tinting
- 运行库
- IIC和SPI总线协议
- 经典面试笔试题
- C++PrimerPlus学习之类学习四(类继承)
- javascript自定义右键菜单并屏蔽默认右键菜单【原创】