介紹
DAO就是
DatabaseAccess Objects,數據訪問
對象的英文縮寫。在VB中提供了兩種與Jet資料庫引擎接口的方法:
Data控制項和數據訪問
對象(DAO)。
Data控制項只給出有限的不需編程而能訪問現存資料庫的功能,而DAO模型則是全面控制資料庫的完整
編程接口。
Data控制項將常用的DAO功能封裝在其中,它與DAO控制項的關係就好像記憶體與CACHE之間的關係一樣,所以這兩種方法並不是互斥的,實際上,它們常同時使用。
DAO數據訪問
對象(DataAccessObjects)是一種
面向對象的界面接口。通過DAO/Jet功能可以訪問ISAM資料庫,使用DAO/ODBCDirect功能可以實現遠程RDO功能。使用DAO的程式編碼非常簡單,DAO提供豐富的
游標(Cursor)類型的
結果集和非游標(Cursor-Less)類型的結果集,同DDL(
數據描述語言)的功能很類似。現在vb資料庫編程大都使用ADO,很少人還用DAO.
DAO是集合,
對象,方法和屬性;它用
對象集合來處理資料庫,表,視圖和索引等。使用DAO
編程,可以訪問並運算元據庫,管理資料庫的
對象和定義資料庫的結構等。
DAO模型是設計關係資料庫系統結構的
對象類的集合。它們提供了完成管理一個
關係型資料庫系統所需的全部操作的屬性和方法,這其中包括創建資料庫,定義表、欄位和索引,建立表間的關係,定位和查詢資料庫等。
Visual Basic中的資料庫編程就是創建數據訪問
對象,這些數據訪問對象對應於被訪問物理資料庫的不同部分,如資料庫、表、欄位和索引等,同時用這些對象的屬性和方法來實現對資料庫的操作,以便在Visual Basic
窗體中使用綁定和非綁定控制項來顯示操作結果並接收用戶輸入。
識別資料庫
Visual Basic通過DAO和Jet引擎可以識別三類資料庫:
VisualBasic資料庫
也就是*.MDB資料庫
外部資料庫
它們是使用幾種流行格式的“索引順序訪問方法(ISAM)”資料庫,這些流行格式包括Btrieve、dBASEIII、dBASEIV、Microsoft FoxPro versions2.0和2.5以及Paradox versions 3.x和4.0。在Visual Basic中能夠創建和操作所有以上格式的資料庫。也可以訪問文本檔案資料庫和Microsoft Excel或Lotus1-2-3
電子表格。
ODBC資料庫
包括符合ODBC標準的客戶/伺服器資料庫,如Microsoft SQL Server。要在Visual Basic中創建真正的客戶/伺服器應用程式,可以使用ODBC Direct直接把命令傳遞給伺服器處理。也就是說Visual Basic還支持其它不使用Jet
資料庫引擎的數據訪問方法。數據訪問
對象的ODBC Direct模式允許使用同樣的對象模型和語法繞過Jet引擎直接訪問ODBC數據。
由上面的敘述可知,對於編程人員來講,你只須了解DAO的使用,對具體的
資料庫系統無須做深入的探討,就可對幾乎任何一種資料庫進行操作,“以不便應萬變”, 而對
資料庫檔案自身的物理操作,將由相應的資料庫引擎把數據訪問
對象上的這些操作轉換為對資料庫檔案自身的物理操作,這些引擎來處理所有與各種資料庫的接口。
優點
使用數據訪問對象的優點是應用程式的兩個重要部分之間相對簡單並嚴格分離,它們可以但不應該彼此了解任何東西,並且兩者可預期的頻繁和獨立發展。改變業務邏輯可以依賴於相同的DAO接口,而對持久性邏輯的更改只要接口保持正確實現,就不會影響DAO客戶端。存儲的所有細節都隱藏在應用程式的其餘部分中(見
信息隱藏)。因此,可以修改一個DAO實現而不影回響用程式的其餘部分,從而可能實現對持久性機制的更改。DAO充當了應用程式與資料庫之間的中介,它們在對象與資料庫記錄之間來迴轉移數據。用測試替身取代DAO可以促進代碼的
單元測試,使測試不依賴於持久層。
在
Java程式語言的非特定上下文中,數據訪問對象作為一項設計概念可以用多種方式實現。這可以將應用程式中的數據訪問部分分離為非常簡單的接口,遷移到框架或商業產品。DAO編碼範例可能需要一些技巧。像是Java Persistence API和
Enterprise JavaBeans之類的技術已內置在應用程式伺服器中,可以在JavaEE應用程式伺服器的應用程式中使用。商業產品如
TopLink可以在基於
對象關係映射(ORM)的產品上使用。流行的開源ORM產品包括Doctrine (PHP)、
Hibernate、
iBATIS,以及JPA實現(例如Apache OpenJPA)。
缺點
使用DAO的潛在缺點包括
抽象泄漏、代碼重複和抽象反演。尤其是將DAO作為常規Java對象的抽象會隱藏每個資料庫訪問的高成本,並且可能強迫開發人員觸發多個資料庫查詢來檢索普通SQL查詢中一次就可取回的信息。如果一個應用程式需要多個DAO,人們可能發現自己對每個DAO重複基本上相同的創建、讀取、更新和刪除代碼。不過,也可以實現一個處理常用操作的通用DAO來避免樣板化代碼。