Du bist definitiv nicht derjenige, der die Dinge verwirrt. :-)
Ich denke, die Antwort auf die Frage hängt davon ab, wie sehr Sie ein Purist sein wollen.
Wenn Sie eine strikte DDD-Sichtweise wünschen, führt Sie dies auf einen Weg. Wenn Sie das Repository als ein Muster betrachten, das uns geholfen hat, die Schnittstelle der Schicht, die zwischen den Diensten und der Datenbank trennt, zu standardisieren, werden Sie durch ein anderes heruntergefahren.
Das Repository ist aus meiner Sicht nur eine klar festgelegte Ebene für den Zugriff auf Daten. Mit anderen Worten, eine standardisierte Methode zur Implementierung Ihrer Datenzugriffsebene. Es gibt einige Unterschiede zwischen verschiedenen Repository-Implementierungen, aber das Konzept ist das gleiche.
Einige Benutzer legen mehr DDD-Einschränkungen für das Repository fest, während andere das Repository als bequemen Vermittler zwischen der Datenbank und der Serviceschicht verwenden. Ein Repository wie ein DAL isoliert die Serviceschicht von den Datenzugriffsspezifikationen.
Ein Implementierungsproblem, das sie zu unterscheiden scheint, besteht darin, dass ein Repository häufig mit Methoden erstellt wird, die eine Spezifikation annehmen. Das Repository gibt Daten zurück, die dieser Spezifikation entsprechen. Die meisten traditionellen DALs, die ich gesehen habe, haben einen größeren Satz von Methoden, bei denen die Methode eine beliebige Anzahl von Parametern akzeptiert. Dies mag nach einem kleinen Unterschied klingen, ist jedoch ein großes Problem, wenn Sie die Bereiche Linq und Expressions betreten. Unsere Standard-Repository-Oberfläche sieht folgendermaßen aus:
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();
}
Ist das ein DAL oder ein Repository? In diesem Fall denke ich, dass es beides ist.
Kim