Kann mir bitte jemand das Repository-Muster in .NET erklären, Schritt für Schritt mit einem sehr einfachen Beispiel oder einer Demo.
Ich weiß, dass dies eine sehr häufige Frage ist, aber bisher habe ich keine zufriedenstellende Antwort gefunden.
c#
asp.net
design-patterns
repository
Sa Patil
quelle
quelle
Antworten:
Zusammenfassend würde ich die umfassenderen Auswirkungen des Repository-Musters beschreiben. Es ermöglicht Ihrem gesamten Code, Objekte zu verwenden, ohne wissen zu müssen, wie die Objekte beibehalten werden. Das gesamte Wissen über die Persistenz, einschließlich der Zuordnung von Tabellen zu Objekten, ist sicher im Repository enthalten.
Sehr oft finden Sie SQL-Abfragen in der Codebasis verstreut. Wenn Sie einer Tabelle eine Spalte hinzufügen, müssen Sie nach Codedateien suchen, um die Verwendung einer Tabelle zu finden. Die Auswirkungen der Änderung sind weitreichend.
Mit dem Repository-Muster müssten Sie nur ein Objekt und ein Repository ändern. Die Auswirkungen sind sehr gering.
Vielleicht hilft es, darüber nachzudenken, warum Sie das Repository-Muster verwenden würden. Hier sind einige Gründe:
Sie haben nur einen Ort, an dem Sie Änderungen an Ihrem Datenzugriff vornehmen können
Sie haben einen einzigen Ort, der (normalerweise) für eine Reihe von Tabellen verantwortlich ist.
Es ist einfach, ein Repository durch eine gefälschte Implementierung zum Testen zu ersetzen. Sie benötigen also keine Datenbank für Ihre Komponententests
Es gibt auch andere Vorteile, zum Beispiel, wenn Sie MySQL verwenden und zu SQL Server wechseln möchten - aber ich habe dies in der Praxis noch nie gesehen!
quelle
IConnection
,ICommand
usw Teil, versteckt die Art der Datenbank. Das Repository ist normalerweise domänenzentrierter.Dies ist ein schönes Beispiel: Das Repository-Musterbeispiel in C #
Grundsätzlich verbirgt das Repository die Details darüber, wie genau die Daten aus / in die Datenbank abgerufen / beibehalten werden. Unter der Decke:
quelle
IDbContext
) oder in nhibernate (ISession
) bereitgestellten Schnittstellen . Ein korrekt implementiertes Repository abstrahiert ALLE persistenzspezifischen Informationen (wie die Funktionsweise des aktuellen Linq To Sql-Anbieters). dh niemals aussetzenIQueryable
.IQueryable
ist keine persistenzspezifische Information. Die Sicherung des IQueryable kann so einfach wie ein fest codiertes Array sein oder aus einer XML-Datei, einem Webdienst, einer Datenbank, einer Flatfile usw. stammen. Ich würde kein Repository empfehlen, das IQueryable nicht wie immer verfügbar macht Dies führt in jedem Fall zu einem langsamen Datenzugriff, bei dem durch das Offenlegen von IQueryable einige Instanzen gegebenenfalls Leistungsverbesserungen vornehmen können, wenn der Persistenzspeicher über diese Funktion verfügt. Wenn Sie DbContext verstecken, können Sie bei Bedarf zu einem anderen ORM wechseln (oder zu keinem ORM!)IN
SQL-Klausel zu erstellen, ohne zu wissen, wie der jeweilige LinqToSql-Anbieter dies tut.