W tym ujęciu DAO działa jako adapter pomiędzy komponentem korzystającym z danych a konkretnym mechanizmem dostępu do danych, tak aby zmiany po stronie źródła danych nie wymuszały zmian w kodzie warstwy wyższej.
Opis wzorca wyróżnia typowe role składowe: BusinessObject – klient danych (np. komponent warstwy biznesowej lub prezentacji), który potrzebuje odczytu i zapisu danych. DataAccessObject – obiekt pośredniczący, który enkapsuluje logikę dostępu do danych (łączenie, wykonywanie operacji, mapowanie danych) i udostępnia klientowi uproszczony interfejs. DataSource – konkretna implementacja źródła danych (np. relacyjna baza danych, repozytorium XML, system plików, usługa zewnętrzna lub inne systemy). ValueObject – obiekt przenoszący dane pomiędzy DAO a klientem (pokrewny koncepcji DTO). W literaturze Core J2EE Patterns opisano m.in.: Strategię z fabryką DAO (np. z użyciem Abstract Factory), w której klient pozyskuje konkretne implementacje DAO zależnie od typu/producenta źródła danych (np.