Can you summarize the following document?
        
  使用資料訪問物件的優點是應用程式的兩個重要部分之間相對簡單並嚴格分離,它們可以但不應該彼此瞭解任何東西,並且兩者可預期的頻繁和獨立發展。改變業務邏輯可以依賴於相同的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來避免樣板化程式碼。
在計算機軟體中,資料訪問物件(data access object,DAO)是為某種型別的資料庫或其他永續性機制提供一個抽象介面的物件。通過對映應用程式對持久層的呼叫,DAO提供一些特定的資料操作,而無需暴露資料庫細節。這種隔離支援單一功能原則。它分離了應用程式需要訪問哪些資料,就域特定物件和資料型別(DAO的公共介面),而言,這些需求可以用資料庫管理系統(DBMS)、資料庫模式等滿足(DAO的實現)。