反射 抽象工廠模式切換DB資料來源(附Demo)

2022-01-16 08:09:56 字數 1682 閱讀 5619

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

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

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

這裡,先貼上程式結構圖:

從上圖可以看出,我定義了兩個實體,department 還有 user,在這裡模擬資料庫裡面的兩張表。

現在的情況是:以前我使用sqlserver資料庫來存放資料,應客戶需求,將要改成oracle資料庫。

拿user表來當例子,

這裡,我定義了乙個iuser介面,規定了兩個方法,分別是插入一條資料的insert方法,還有讀取一條資料的getuser方法。

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

這兩個類都實現iuser介面

新建乙個dataaccess工廠類,在這個類裡面來 利用反射來完成類名的自動呼叫(不知道這個說法正不正確...)。

上圖中的createuser方法中,用反射來設定我們預定義的資料庫。這裡,我將資料庫的型別配置放在了web.config裡面,這樣就可以實現通過修改配置檔案來修改使用的資料庫,就像訪問資料庫使用配置檔案存放連線字元一樣。

1

<

>23

<

add

key="db"

value

="sqlserver"

/>

4>

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

到這裡,這個程式基本完成,另外在新增上department的相關類就可以了,這樣就實現了切換db了。

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

若是我們需要新增乙個新的資料庫,例如access,那麼,我們僅需要新建乙個access操作類,並將db的值修改成access即可。不用修改客戶端**。

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

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

Mybatis資料來源 工廠模式

mybatis在資料來源物件管理策略上使用了工廠模式,即乙個型別的物件由特定的工廠類來提供 在解析配置檔案資料來源配置流程中 以上 獲得了 transactionfactory和 datasourcefactory物件,datasource物件由datasourcefactory構建而來 datas...

springboot多資料來源切換

實際工作中,我們會遇到springboot專案初始化啟動時候,不能指定具體連線哪個資料來源的時候,不同的介面連線不同的資料來源或者前端頁面指定連線某個資料來源等等情況,就會遇到動態資料來源切換的問題。一.通用的動態資料來源切換場景 spring boot提供了abstractroutingdatas...

spring aop動態切換資料來源問題

最近專案需要用到多資料來源,使用aop切換了資料來源始終 還是原來的資料來源,後來感覺是事務引起的,就把 transactional註解去掉,就可以切換成功,到網上一查,原來是多資料來源要配置多個事務管理器,配了多個事務管理器後 再把 transactional 加上,ok 了,配上 id txma...