Vous n'êtes certainement pas celui qui confond les choses. :-)
Je pense que la réponse à la question dépend de combien vous voulez être puriste.
Si vous voulez un point de vue DDD strict, cela vous mènera sur un chemin. Si vous considérez le référentiel comme un modèle qui nous a aidé à standardiser l'interface de la couche qui sépare les services et la base de données, cela vous en entraînera une autre.
De mon point de vue, le référentiel n'est qu'une couche d'accès aux données clairement spécifiée, ou en d'autres termes une manière standardisée d'implémenter votre couche d'accès aux données. Il existe quelques différences entre les différentes implémentations de référentiel, mais le concept est le même.
Certaines personnes mettront plus de contraintes DDD sur le référentiel tandis que d'autres utiliseront le référentiel comme médiateur pratique entre la base de données et la couche de service. Un référentiel comme un DAL isole la couche de service des spécificités d'accès aux données.
Un problème d'implémentation qui semble les rendre différents, est qu'un référentiel est souvent créé avec des méthodes qui prennent une spécification. Le référentiel renverra des données qui satisfont à cette spécification. La plupart des DAL traditionnels que j'ai vus auront un plus grand ensemble de méthodes où la méthode prendra n'importe quel nombre de paramètres. Bien que cela puisse sembler une petite différence, c'est un gros problème lorsque vous entrez dans les domaines de Linq et des Expressions. Notre interface de référentiel par défaut ressemble à ceci:
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();
}
S'agit-il d'un DAL ou d'un référentiel? Dans ce cas, je suppose que c'est les deux.
Kim