Antes do advento do DDD o padrão Data Access Object (DAO) era usado para acessar dados persistidos. À primeira vista parece que o Repositório serve o mesmo propósito. O Repositório e o DAO partilham o propósito de prover dados aos outros objetos da sua camada, mas o Repositório existe em uma camada diferente do DAO. O DAO existe na camada deinteração com o banco de dados, o Repository existe uma camada acima dessa. O DAO é um dos objetos que a implementação do Repository pode usar (o outro seria um Domain Store).
Enquanto o DAO visa interagir com os dados persistidos de uma forma mais próxima à representação persistente (tabelas, por exemplo), o Repository visa mediar entre o domínio e os dados persistidos; entre as entidades e as tabelas. O repositório é composto - assim como o DAO - de interface e implementação, mas a interface do Repositório utiliza apenas tipos fundamentais como Strings e inteiros e objetos do domínio. A interface do DAO utiliza apenas tipos fundamentais como Strings e inteiros e objetos de persistência. Objetos de persistência tendem a seguir uma estrutura flat em que cada campo corresponde a uma coluna na tabela. Os objetos de domínio tendem a seguir uma estrutura mais complexa com aninhamentos e vários objetos colaborando entre si.
Todas as operações do Repositório devolvem e recebem objetos do domínio, enquanto que as operações do DAO devolvem e recebem objetos de persistência. A implementação do Repository tem acesso às classes de domínio e às classes de persistência transformando objetos de uma nos objetos da outra e vice-versa, conforme necessário. O DAO tem apenas acesso aos objetos de persistência e os utiliza tanto na interface quanto na implementação.