熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

運用設計模式構建通用數據庫訪問類

2013-11-15 12:54:51  來源: ASP編程 
這就需要我們在實際開發過程中將這些數據庫訪問類再作一次封裝經過這樣的封裝不僅可以達到上述的目標還可以減少操作數據庫的步驟減少代碼編寫量在這個方面微軟為我們提供了Application Block但是可惜的是目前只支持Sql Server這裡介紹一種在實際應用中得到了非常好的效果的實作策略——筆者編寫的Websharp框架中的數據訪問結構Factory設計模式是使用的主要方法

  我們先來看看Factory的含義定義一個用於創建對象的接口讓子類決定實例化哪一個類Factory Method使一個類的實例化延遲到其子類我們這裡可能會處理對多種數據庫的操作因此需要首先定義一個操縱數據庫的接口然後根據數據庫的不同由類工廠決定實例化哪個類

  下面我們首先來定義這個訪問接口為了方便說明問題我們在這裡只列出了比較少的方法其他的方法是很容易參照添加的

public interface DataAccess
{
 DatabaseType DatabaseType{get;} //數據庫類型
 IDbConnection DbConnection{get;} //得到數據庫連接
 void Open(); //打開數據庫連接
 void Close(); //關閉數據庫連接

 IDbTransaction BeginTransaction(); //開始一個事務
 int ExecuteNonQuery(string commandText); //執行Sql語句
 DataSet ExecuteDataset(string commandText);//執行Sql返回DataSet
}
  因為DataAccess的具體實現類有一些共同的方法所以先從DataAccess實現一個抽象的AbstractDataAccess類包含一些公用方法然後我們分別為Sql ServerOracle和OleDb數據庫編寫三個數據訪問的具體實現類

public sealed class MSSqlDataAccess : AbstractDataAccess
{
 ……//具體實現代碼
}

public class OleDbDataAccess : AbstractDataAccess
{
 ……//具體實現代碼
}

public class OracleDataAccess : AbstractDataAccess
{
 ……//具體實現代碼
}
  現在我們已經完成了所要的功能下面我們需要創建一個Factory類來實現自動數據庫切換的管理這個類很簡單主要的功能就是根據數據庫類型返回適當的數據庫操縱類

public sealed class DataAccessFactory
{
 private DataAccessFactory(){}
 private static PersistenceProperty defaultPersistenceProperty;
 public static PersistenceProperty DefaultPersistenceProperty
 {
  get{return defaultPersistenceProperty;}
  set{defaultPersistenceProperty=value;}
 }

public static DataAccess CreateDataAccess(PersistenceProperty pp)
{
 DataAccess dataAccess;
 switch(ppDatabaseType)
 {
  case(DatabaseTypeMSSQLServer):
   dataAccess = new MSSqlDataAccess(ppConnectionString);
   break;
  case(DatabaseTypeOracle):
   dataAccess = new OracleDataAccess(ppConnectionString);
   break;
  case(DatabaseTypeOleDBSupported):
   dataAccess = new OleDbDataAccess(ppConnectionString);
   break;
  default:
   dataAccess=new MSSqlDataAccess(ppConnectionString);
   break;
 }
 return dataAccess;
}

public static DataAccess CreateDataAccess()
{
 return CreateDataAccess(defaultPersistenceProperty);
}

}
  好了現在一切都完成了客戶端在代碼調用的時候可能就是采用如下形式

PersistenceProperty pp = new PersistenceProperty();
ppConnectionString = \server=;uid=sa;pwd=;database=Northwind;\;
ppDatabaseType = DatabaseType MSSQLServer;
ppUserID = sa;
ppPassword = ;
DataAccess db= DataAccessFactoryCreateDataAccess(pp)
dbOpen();
……//db需要的操作
dbClose();
  或者如果事先設定了DataAccessFactory的DefaultPersistenceProperty屬性可以直接使用
DataAccess db= DataAccessFactoryCreateDataAccess()方法創建DataAccess實例

  當數據庫發生變化的時候只需要修改PersistenceProperty的值客戶端不會感覺到變化也不用去關心這樣實現了良好的封裝性當然前提是你在編寫程序的時候沒有用到特定數據庫的特性例如Sql Server的專用函數

From:http://tw.wingwit.com/Article/program/ASP/201311/21865.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.