¿Cuál es la diferencia entre un DAO y un Repository?
Opciones
- Son idénticos en todos los casos y siempre se pueden intercambiar
- Un DAO se orienta a tablas; un Repository, al dominio (Opción correcta)
- DAO es un framework web y Repository es un tipo de base de datos
- 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.