Soweit ich gelernt habe, IRepository
sollte das enthalten CRUD
. Dann erben wir dies IRepository
in unseren anderen Interfaces like IProduct
und implementieren IProduct
konkrete Klassen ProductRepository
mit Methoden wie GetAllProducts()
, Top5Products()
.
Dasselbe könnten wir auch mit der n-Tier-Architektur tun. wie, Erstellen DAL Class Library
und definieren Sie darin eine Klasse Product
mit Methoden wie GetAllProducts()
, Top5Products()
.
In beiden DAL.Product
und Repo.ProductRepository
Klassen , die wir initialisieren DB Context
von Entity Framework
und unsere relevanten Daten abfragen.
Der Aufruf ist in beiden Repo.ProductRepository
oder DAL.Product
Methoden von ähnlichBLL
Angesichts dieser Ähnlichkeiten meine Frage, was ist der Nutzen von Repos? Ich kann das gleiche mit viel Leichtigkeit tun n-Tier - Architekturen mit der Verwendung von ( Controller
, BLL Class Library
, DAL Class Library
).
Antworten:
Mein Verständnis ist:
DAL (Data Access Layer) bezieht sich auf eine Schicht in Ihrer Software, die zwischen Ihrer Persistenztechnologie und Ihrer Anwendungslogik liegt. Der Zweck besteht darin, die Bedenken hinsichtlich des Datenzugriffs von den übrigen Bedenken Ihrer Anwendung zu trennen. Es ist ein allgemeines Konzept.
Repository ist ein Konzept von DDD (Domain Driven Design).
In DDD ist ein Repository dafür verantwortlich, alle Datenzugriffsprobleme für ein bestimmtes Aggregat zu kapseln . Dies geht mit der Verantwortung einher, die Konsistenz beim Lesen und Schreiben des Aggregats sicherzustellen. Und ein Aggregat ist eine Gruppe von verwandten Entitäten (zB
Product
,Store
usw.).So ist ein Repository speziell sich seine Aggregate Beharrlichkeit und Beständigkeit betrifft. Ihr allgemeiner DAL wird höchstwahrscheinlich aus bestimmten Repositories bestehen
TL; DR;
quelle
Sie vergleichen zwei verschiedene und sich ergänzende Konzepte:
Das DAL in Ihrem Beispiel
Interessanterweise
DAL.Product
scheint in Ihrem Beispiel der Klassenbibliothek ein Repository zu sein. Es ist also normal, dass Sie keinen wirklichen Unterschied sehen: Aus Sicht der Implementierung ist es dasselbe (in diesem speziellen Fall).Aber es muss nicht; Ein DAL könnte anders implementiert werden, zum Beispiel:
Was ist anders für das Repository
Das Konzept des Repositorys ist unabhängig vom Architekturmodell und der Implementierung. Sie müssen nicht in Ebenen oder Datenbanken denken. Alles, was Sie beim Entwerfen Ihrer Domain wissen müssen, ist, dass sich Ihre Objekte in Repositorys befinden, die eine besondere Art von Sammlung darstellen, die Beständigkeit bietet. Dies macht sie sehr gut für das Domain-Design geeignet und erklärt, warum sie ein Schlüsselelement des Domain Driven Design sind .
In DDD müssen die Repositorys einige weitere Regeln beachten: Sie ermöglichen den Zugriff auf Aggregate (eine unabhängige Entität oder eine Gruppe verwandter Entitäten, die von einem Aggregatstamm abhängig sind), und es gibt ein einzelnes Repository pro Aggregat.
quelle