如何利用抽象工厂更换数据库
生活随笔
收集整理的這篇文章主要介紹了
如何利用抽象工厂更换数据库
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
? ?VS中我們都加入了抽象工廠模式,都懂的這種模式可以用來(lái)更換數(shù)據(jù)庫(kù)。具體應(yīng)用起來(lái)大家都知道應(yīng)用反射,首先我介紹下我的情況吧。
<span?style="font-size:18px;">Imports?DFactory?? Imports?IDAL?? Imports?System.Reflection?? Imports?System.Configuration?? ?? Public?Class?DataAccess????? ????Private?ReadOnly?assemblyName?As?String?=?"DAL"?? ????Dim?strDB?As?String?=?System.Configuration.ConfigurationSettings.AppSettings("DB")?? ?? ????'返回一個(gè)IStudent接口?? ????Public?Function?CheckStuID()?As?IStudent?? ????????Dim?ClassName?As?String?=?assemblyName?+?"."?+?strDB?+?"StuInfoDAL"?? ????????Return?CType(Assembly.Load("DAL").CreateInstance(ClassName),?IStudent)?? ????End?Function?? ?? ????'返回注冊(cè)接口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?? </span>??
<add?key="DB"?value="Sql"/>?? 改變?yōu)?? <add?key="DB"?value="Oracle"/>??
Private?ReadOnly?assemblyName?As?String?=?"DAL"??
<add?key="MM"?value="OracleDAO"/>??
Private?ReadOnly?assemblyName?=?System.Configuration.ConfigurationSettings.AppSettings("MM")??
? ?現(xiàn)在的情況是我的D層程序集和命名空間都為DAL,D層的類也都是以Sql為前綴來(lái)命名,例如SqlCancelCardDAL,在工廠中,我的代碼時(shí)這么寫(xiě)的,大家可以看一下:
[vb]?view plaincopy
App.config中反射為:
[vb]?view plaincopy
? ? 接著想,我們?cè)瓉?lái)的命名空間跟改變的OracleDAO命名空間完全不一樣,看一下原來(lái)的工廠代碼這樣寫(xiě)的:
[vb]?view plaincopy? ? 這樣就在程序里把命名空間給寫(xiě)死了,但是我們同樣可以利用反射的原理將命名空間移動(dòng)到XML中,不需要打開(kāi)VS來(lái)看,因?yàn)槲覀兊倪\(yùn)行都是從項(xiàng)目文件中UI層Debug開(kāi)始的,所以只需在UI\bin\Debug\UI.exe.config中添加一句:
[vb]?view plaincopy? 同時(shí)在工廠層中將寫(xiě)死的命名空間那句改為:
[vb]?view plaincopy? ?最后一步就是:將每個(gè)方法中的return句中“DAL”改為assemblyName即為完美。
? ?這樣我們的程序如何更改數(shù)據(jù)庫(kù)只需在配置文件中更改命名空間和反射中類的前綴即可,這樣就充分運(yùn)用了抽象工廠+反射,實(shí)現(xiàn)更換數(shù)據(jù)庫(kù)的功能。
總結(jié)
以上是生活随笔為你收集整理的如何利用抽象工厂更换数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 依赖倒置(DIP),控制反转(IoC)与
- 下一篇: 抽象工厂模式:实现ASP.NET访问不同