Zasadniczo zapewnia abstrakcję danych, dzięki czemu aplikacja może pracować z prostą abstrakcją, która ma interfejs przybliżający że z kolekcji. Dodawanie, usuwanie, aktualizowanie i wybieranie elementów z tej kolekcji odbywa się za pomocą szeregu prostych metod, bez konieczności zajmowania się problemami z bazą danych, takimi jak połączenia, polecenia, kursory lub czytniki. Korzystanie z tego wzorca może pomóc w osiągnięciu luźnego sprzężenia i może sprawić, że obiekty domeny będą ignorowane.
Generalnie pojęcie luźnego wiązania to fakt, że zmiany w jednym komponencie najmniej wpływają na istnienie lub działanie innego komponentu.
Najprostszym podejściem, zwłaszcza w przypadku istniejącego systemu, jest utworzenie nowej implementacji repozytorium dla każdego obiektu biznesowego, który należy przechowywać w warstwie trwałości lub pobierać z niej.
public interface IRepository<Typ> where Typ : BazowaEncja
Innym podejściem jest stworzenie prostego, ogólnego interfejsu dla Twojego repozytorium. Możesz ograniczyć typy, z którymi współpracuje, aby były określonego typu lub zaimplementować określony interfejs.
Typ GetById(int id);
IEnumerable<Typ > List();
IEnumerable<Typ > List(Expression<Func<Typ , bool>> predicate);
void Add(Typ entity);
void Delete(Typ entity);
void Edit(Typ entity);
Zaletą tego podejścia jest zapewnienie wspólnego interfejsu do pracy z dowolnymi obiektami. To tylko przykładowy zestaw metod