O ile się dowiedziałem, IRepository
powinien zawierać CRUD
. Wtedy dziedziczą to IRepository
w naszych innych interfejsów, jak IProduct
i realizować IProduct
konkretne klasy ProductRepository
, z metod, takich jak GetAllProducts()
, Top5Products()
.
To samo możemy zrobić z architekturą n-tier. jak, tworzenie DAL Class Library
aw nim zdefiniować klasę Product
z metod, takich jak GetAllProducts()
, Top5Products()
.
W obu DAL.Product
i Repo.ProductRepository
klas możemy zainicjować DB Context
od Entity Framework
i kwerendy nasze odpowiednich danych.
Wywołanie jest podobne w obu metodach Repo.ProductRepository
lub DAL.Product
zBLL
Biorąc pod uwagę te podobieństwa, moje pytanie, jakie są korzyści z repos? Może zrobić to samo z dużą łatwością za pomocą architektury wielowarstwowej o ( Controller
, BLL Class Library
, DAL Class Library
).
Odpowiedzi:
Rozumiem:
DAL (Data Access Layer) odnosi się do warstwy w oprogramowaniu, która znajduje się między technologią trwałości a logiką aplikacji. Jego celem jest oddzielenie problemów związanych z dostępem do danych od pozostałych problemów związanych z aplikacją. To ogólna koncepcja.
Repozytorium to koncepcja z DDD (Domain Driven Design).
W DDD repozytorium jest odpowiedzialne za hermetyzowanie wszystkich problemów związanych z dostępem do danych dla danego agregatu . Wiąże się to z obowiązkiem zapewnienia spójności podczas odczytów i zapisów Kruszywa. A kruszywo jest grupowanie powiązanych podmiotów (np
Product
,Store
itp).Dlatego repozytorium jest szczególnie świadome problemów związanych z trwałością i spójnością swojego agregatu. Twój ogólny DAL najprawdopodobniej będzie się składał z określonych repozytoriów
TL; DR;
źródło
Porównujesz dwie różne i uzupełniające się koncepcje:
DAL w twoim przykładzie
Co ciekawe, w twoim przykładzie biblioteki klas
DAL.Product
wydaje się być repozytorium. To normalne, że tak naprawdę nie widać różnicy: z punktu widzenia implementacji jest tak samo (w tym konkretnym przypadku).Ale nie musi; DAL może być zaimplementowany inaczej, na przykład:
Czym różni się repozytorium
Koncepcja repozytorium jest niezależna od modelu architektonicznego i wdrożenia. Nie musisz myśleć o warstwach ani bazie danych. Wszystko, co musisz wiedzieć, projektując domenę, to to, że Twoje obiekty znajdują się w repozytoriach, które są szczególnym rodzajem kolekcji, która zapewnia trwałość. Dzięki temu są bardzo odpowiednie do projektowania domen i wyjaśniają, dlaczego są kluczowym elementem projektowania opartego na domenach .
W DDD repozytoria mają więcej zasad, których należy przestrzegać: dają dostęp do agregatów (niezależny byt lub grupa powiązanych podmiotów zależnych od zagregowanego katalogu głównego) i istnieje jedno repozytorium na agregat.
źródło