問題虛擬背景:A項(xiàng)目組要實(shí)現(xiàn)一個(gè)基于Sql Server的應(yīng)用,但工作環(huán)境只安裝有MySql(公司對(duì)開源比較看好: )),而且客戶有可能會(huì)轉(zhuǎn)移到Oracle數(shù)據(jù)庫(kù)環(huán)境。要求應(yīng)用具有數(shù)據(jù)庫(kù)移植能力和快速更換能力,使應(yīng)用在工作環(huán)境調(diào)試成功后能迅速轉(zhuǎn)移到客戶的Sql Server環(huán)境,而且將來可以方便地轉(zhuǎn)向Oracle。
Andy提出的可用方案:1、使用標(biāo)準(zhǔn)JDBC2、使用抽象類定義數(shù)據(jù)訪問單元3、定義具體數(shù)據(jù)源訪問單元繼承2中接口
代碼示例:定義數(shù)據(jù)訪問單元抽象類,包含數(shù)據(jù)訪問邏輯
定義具體數(shù)據(jù)源訪問單元
在調(diào)用數(shù)據(jù)訪問層時(shí),可以聲明一個(gè)DataManager的引用,然后在構(gòu)造器中實(shí)例化為具體子類,如:
以后要遷移到另一個(gè)數(shù)據(jù)庫(kù)(有JDBC驅(qū)動(dòng)),只需定義具體子類繼承DataManager(如HsqlDataManager),然后修改資源文件中的DataManager名稱(或者將new的類名改一下),不需要修改代碼。
這興許可以解釋另一個(gè)問題:不贊成使用存儲(chǔ)過程,而應(yīng)將SQL語句嵌在代碼中(適用于Java;微軟注定.Net不會(huì)有平臺(tái)移植性,數(shù)據(jù)庫(kù)大都用Sql Server,所以寫存儲(chǔ)過程還是比較好的)。(我在我的一個(gè)Eclipse RCP項(xiàng)目里使用了這種模式,從Sql server 2000到Hsql,特別方便,看起來感覺也比較好)歡迎大家拍轉(zhuǎn),^_^