Czy ktoś może wyjaśnić mi Wzorzec repozytorium w .NET, krok po kroku, podając bardzo prosty przykład lub wersję demonstracyjną.
Wiem, że to bardzo częste pytanie, ale jak dotąd nie znalazłem zadowalającej odpowiedzi.
c#
asp.net
design-patterns
repository
Sa Patil
źródło
źródło
Odpowiedzi:
Podsumowując, opisałbym szerszy wpływ wzoru repozytorium. Pozwala to całemu kodowi na używanie obiektów bez konieczności znajomości sposobu utrwalania obiektów. Cała wiedza na temat trwałości, w tym mapowanie tabel na obiekty, jest bezpiecznie zawarta w repozytorium.
Bardzo często zapytania SQL są rozproszone w bazie kodu, a kiedy przychodzi się dodać kolumnę do tabeli, należy przeszukać pliki kodu, aby spróbować znaleźć użycie tabeli. Wpływ zmiany jest daleko idący.
W przypadku wzorca repozytorium wystarczy zmienić tylko jeden obiekt i jedno repozytorium. Wpływ jest bardzo mały.
Być może pomogłoby zastanowić się, dlaczego użyjesz wzorca repozytorium. Oto kilka powodów:
Masz jedno miejsce do wprowadzania zmian w dostępie do danych
Masz jedno miejsce odpowiedzialne za zestaw tabel (zwykle)
Łatwo zastąpić repozytorium fałszywą implementacją do testowania - więc nie musisz mieć bazy danych dostępnej dla testów jednostkowych
Są też inne korzyści, na przykład, jeśli korzystałeś z MySQL i chciałeś przejść na SQL Server - ale tak naprawdę nigdy nie widziałem tego w praktyce!
źródło
IConnection
,ICommand
itd część, która ukrywa typ bazy danych. Repozytorium jest zwykle bardziej skoncentrowane na domenach.To dobry przykład: przykładowy wzór repozytorium w C #
Zasadniczo repozytorium ukrywa szczegóły dotyczące tego, jak dokładnie dane są pobierane / utrwalane z / do bazy danych. Pod przykryciem:
źródło
IDbContext
) lub w nhibernate (ISession
). Prawidłowo zaimplementowane repozytorium wyodrębnia WSZYSTKIE informacje dotyczące trwałości (takie jak sposób działania bieżącego dostawcy Linq To Sql). tzn. nigdy nie narażajIQueryable
.IQueryable
nie jest informacjami dotyczącymi trwałości. Tworzenie kopii zapasowej IQueryable może być tak proste, jak tablica z kodem na stałe, lub może pochodzić z pliku XML, usługi sieci Web, bazy danych, pliku płaskiego itp. Nie polecam repozytorium, które nie ujawnia IQueryable, jak zawsze. prowadzi do powolnego dostępu do danych w każdym przypadku, gdy ujawnienie IQueryable pozwoli niektórym instancjom na zwiększenie wydajności w stosownych przypadkach, jeśli magazyn trwałości ma taką możliwość. Ponadto ukrycie DbContext pozwala przełączyć się na inną ORM, jeśli zajdzie taka potrzeba (lub nie ORM!)IN
klauzuli sql, nie wiedząc, jak robi to konkretny dostawca LinqToSql.