重構之抽象工廠,重構工廠
對於抽象工廠,大家不陌生吧,學習設計模式的時候我們就看過啦。自己開始重構的時候也是看過得。但是,紙上得來終覺淺,絕知此事要躬行啊!現在我們就來說說抽象工廠。
一:設定檔
定義我們就不多說了,先來看看到底在哪裡?裡面的內容是什麼吧。也就是存放在UI層的App.config
接著我們來看一下他裡面的內容。
圖上標註的那倆行不陌生吧,第一 行就是串連資料庫的,第二行就是把SqlServer定義為DB。三層之所以解耦,之所以要用抽象工廠,就是為了實現串連資料庫的時候更方便啦。我們在機房重構的時候都應該用的是sqlserver,但是我們假如現在要用access呢?是不是需要在每一個表單裡面的都改了呢?不用啦,直接在設定檔裡面把access定義成DB就可以啦。
二:抽象工廠
根據上面的圖,我們可以知道抽象工廠的位置啦,串連B層和介面,同時D層還要實現介面,我們根據一般使用者下的充值記錄查詢來介紹一下抽象工廠及注意事項。
<span style="font-size:18px;">Imports System.ReflectionImports System.ConfigurationImports IDALPublic Class RechargeFactory Private Shared ReadOnly AssemlyName As String = "DAL" '定義程式集名稱變數D層命名空間的名字 Private Shared db As String = ConfigurationManager.AppSettings("DB") Private Property AssemblyName As String = "DAL" '表示讀設定檔如果設定檔中是sqlserver 就訪問sqlserver資料庫 ''' <summary> ''' 儲值視窗的抽象工廠 ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Function checkCfactory() As IRecharge '建立使用者表的工廠 Dim ClassName As String = AssemblyName + "." + db + "RechargeDAL" ''AssemblyName是程式集的名稱,db+“UserDAL”是DAL層中的sqlServerUserDAL 如果不用SQLserver資料庫,那麼我們 '在建一個類 比如我們訪問access資料庫 那麼類名稱就叫accessUserDal,把設定檔 '中Value值改為Access 這樣就是擴充而不是修改 Dim irecharge As IRecharge '執行個體化介面 '理解Assembly.Load(AssemblyName).CreateInstance(ClassName) irecharge = CType(Assembly.Load(AssemblyName).CreateInstance(ClassName), IRecharge) '將執行個體化的D層通過向上轉型轉換成介面類,然後通過調用介面類中的函數來調用D層中實現該介面的函數 Return irecharge End FunctionEnd Class</span>
我們請看這一行
<span style="font-size:18px;"> Dim ClassName As String = AssemblyName + "." + db + "RechargeDAL"</span>
這裡面的DB就是我們在設定檔中定義的SqlServer啦,後面RechargeDAL是我們在串連D層的名字,也就是D層完整的名稱為SqlServerRechargeDAL.
剛剛開始,還需要後面的實踐來加深對代碼的理解。。。。