反射 + 抽象工廠模式切換DB數據源(附Demo)


      首先,設計模式的文章源自於程傑的《大話設計模式》這本書,這本書個人感覺很適合我,看着不累,能夠安安心心的閱讀學習。在這里十分感謝程傑的這本書,我博文中的例子會根據書上的例子來。為了不侵犯這本書的版權,我不會寫上具體的代碼,僅用自己寫的代碼截圖或者思路描述,畢竟這是給我自己的記錄,我寫文章是為了在我看完書本后自己嘗試描述出來,加深記憶和理解。

       從這篇文章起,我將開始自己有章法的學習設計模式,一篇一篇的記錄我的學習歷程!

本篇博文中用到的設計模式是 抽象工廠模式,用我自己的話概括就是指:某一產品的不同生產形式。

這里,先貼上程序結構圖:

      從上圖可以看出,我定義了兩個實體,Department 還有 User,在這里模擬數據庫里面的兩張表。

現在的情況是:以前我使用Sqlserver數據庫來存放數據,應客戶需求,將要改成Oracle數據庫。

拿User表來當例子,

這里,我定義了一個IUser接口,規定了兩個方法,分別是插入一條數據的Insert方法,還有讀取一條數據的GetUser方法。

如圖中紅框顯示,我新建了兩個類,用來分別執行Oracle的方法還有Sqlserver的方法。

這兩個類都實現IUser接口

新建一個DataAccess工廠類,在這個類里面來 利用反射來完成類名的自動調用(不知道這個說法正不正確...)。

上圖中的CreateUser方法中,用反射來設置我們預定義的數據庫。這里,我將數據庫的類型配置放在了web.config里面,這樣就可以實現通過修改配置文件來修改使用的數據庫,就像訪問數據庫使用配置文件存放連接字符一樣。

1   <appSettings >
2     <!-- 配置使用數據庫的類型 -->
3     <add key="db" value="Sqlserver"/>
4   </appSettings>

其實,這里這樣寫就是實現了用變量來動態的改變方法名,這里通過db這個字符串就可以得到不同“類名”,從而代替了switch case。

到這里,這個程序基本完成,另外在添加上Department的相關類就可以了,這樣就實現了切換DB了。

若是我們新增加了一個表(產品),例如Project,那么,我們僅需要新建該表的model,在不同的數據庫操作類中添加上對應的操作方法(如:insert()),即可。並不會對其他的產品方法造成任何影響。

若是我們需要添加一個新的數據庫,例如Access,那么,我們僅需要新建一個Access操作類,並將db的值修改成Access即可。不用修改客戶端代碼。

具體關於反射的用法,這里不詳說。畢竟是主要擼設計模式的。

最后

我是按照程序編寫的過程來寫的,可能不會寫得很明朗清晰,若是哪里沒有寫明白,請給我留言,我們來探討探討!

另外,謝謝程傑的《大話設計模式》這本優秀的書,對我來說,也許是代碼簡潔之道的啟蒙了!引用該書中的一句話“無痴迷,不成功”

相關鏈接:

Demo下載:http://download.csdn.net/detail/a406502972/7890969


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM