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