VS中我們都加入了抽象原廠模式,都懂的這種模式可以用來更換資料庫。具體應用起來大家都知道應用反射,首先我介紹下我的情況吧。
現在的情況是我的D層程式集和命名空間都為DAL,D層的類也都是以Sql為首碼來命名,例如SqlCancelCardDAL,在工廠中,My Code時這麼寫的,大家可以看一下:
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即為完美。
這樣我們的程式如何更改資料庫只需在設定檔中更改命名空間和反射中類的首碼即可,這樣就充分運用了抽象工廠+反射,實現更換資料庫的功能。