Definitivamente no eres tú quien confunde las cosas. :-)
Creo que la respuesta a la pregunta depende de qué tan purista quieras ser.
Si desea un punto de vista estricto de DDD, eso lo llevará por un camino. Si miras el repositorio como un patrón que nos ha ayudado a estandarizar la interfaz de la capa que separa los servicios y la base de datos, te bajará otra.
Desde mi perspectiva, el repositorio es solo una capa de acceso a los datos claramente especificada, o en otras palabras, una forma estandarizada de implementar su capa de acceso a los datos. Existen algunas diferencias entre las diferentes implementaciones de repositorios, pero el concepto es el mismo.
Algunas personas pondrán más restricciones DDD en el repositorio, mientras que otras usarán el repositorio como un mediador conveniente entre la base de datos y la capa de servicio. Un repositorio como un DAL aísla la capa de servicio de las especificaciones de acceso a datos.
Un problema de implementación que parece hacerlos diferentes, es que un repositorio se crea a menudo con métodos que toman una especificación. El repositorio devolverá datos que satisfagan esa especificación. La mayoría de los DAL tradicionales que he visto tendrán un conjunto más grande de métodos donde el método tomará cualquier número de parámetros. Si bien esto puede parecer una pequeña diferencia, es un gran problema cuando ingresa a los reinos de Linq y Expressions. Nuestra interfaz de repositorio predeterminada se ve así:
public interface IRepository : IDisposable
{
T[] GetAll<T>();
T[] GetAll<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter, List<Expression<Func<T, object>>> subSelectors);
void Delete<T>(T entity);
void Add<T>(T entity);
int SaveChanges();
DbTransaction BeginTransaction();
}
¿Es esto un DAL o un repositorio? En este caso, supongo que son ambos.
Kim