Repaso
English

¿Cuál es la diferencia entre un DAO y un Repository?

Opciones

  1. Son idénticos en todos los casos y siempre se pueden intercambiar
  2. Un DAO se orienta a tablas; un Repository, al dominio (Opción correcta)
  3. DAO es un framework web y Repository es un tipo de base de datos
  4. Repository solo funciona con bases NoSQL, nunca con SQL

Respuesta

Un DAO está cerca de las tablas de la base de datos (CRUD por tabla); un Repository está más cerca del dominio y se comporta como una colección en memoria de agregados

Por qué

DAO (Data Access Object): una clase que oculta los detalles de persistencia de una tabla o entidad: UserDao.insert, findById.

Repository (de Domain-Driven Design): una interface tipo colección para objetos del dominio: users.add(user), users.findByEmail(e); puede combinar varias tablas y habla el idioma del dominio.

En la práctica los dos términos se solapan mucho. JpaRepository de Spring Data es una abstracción repository sobre JPA.

Recuerda

DAO = orientado a tablas. Repository = colección orientada al dominio.

Términos clave

Practica esta pregunta en Repaso