Você definitivamente não é aquele que confunde as coisas. :-)
Acho que a resposta à pergunta depende de quanto você deseja ser purista.
Se você quiser um ponto de vista DDD estrito, isso o levará por um caminho. Se você olhar para o repositório como um padrão que nos ajudou a padronizar a interface da camada que separa entre os serviços e o banco de dados, isso o levará para outra.
O repositório, da minha perspectiva, é apenas uma camada claramente especificada de acesso aos dados. Ou, em outras palavras, uma maneira padronizada de implementar sua camada de acesso a dados. Existem algumas diferenças entre as diferentes implementações de repositório, mas o conceito é o mesmo.
Algumas pessoas colocarão mais restrições DDD no repositório, enquanto outras usarão o repositório como um mediador conveniente entre o banco de dados e a camada de serviço. Um repositório como um DAL isola a camada de serviço de dados específicos de acesso.
Um problema de implementação que parece torná-los diferentes é que um repositório geralmente é criado com métodos que usam uma especificação. O repositório retornará dados que satisfaçam essa especificação. A maioria dos DALs tradicionais que tenho visto terá um conjunto maior de métodos em que o método terá qualquer número de parâmetros. Embora isso possa parecer uma pequena diferença, é um grande problema quando você entra nos domínios do Linq e Expressions. Nossa interface de repositório padrão se parece com isto:
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();
}
Este é um DAL ou um repositório? Neste caso, acho que são os dois.
Kim