DataProvider-vs-Repository
Was ist der Unterschied zwischen Datenprovider und-Repository? Welche Logik sollte ich bei der Auswahl, wie die Namen meiner Klasse?
Repository pattern beschreibt-Klasse mehr oder weniger wie:
internal interface IPersonRepository{
public void Update(Person p);
public void Add(Person p);
public Person Get(int id);
public IEnumerable<Person> GetBatch();
public void Delete(Person p);
}
Dies ist eine Theorie, sondern im realen Leben gibt es möglicherweise andere, spezifischere Methoden, wie GetListPerson(int[] ids)
und so weiter.
Aber was ist der Unterschied mit DataProvider?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, lassen Sie mich hinzufügen, dass einige Konzepte:
Repository
Einen
Repository
ist ein Muster, mit denen Sie Objekte speichern in einem Ort, kann alles sein, wie Datenbanken, xml -, txt-logs, etc. Einige Anwendungen verwenden ein repository zur Umsetzung der Datenbank-Persistenz-und es ist auf der business-Logik-Schicht der Anwendung. Suchen Sie diesen Artikel um mehr zu erfahren.http://msdn.microsoft.com/en-us/library/ff649690.aspx
Daten Anbieter
Einen
DataProvider
ist ein set von Komponenten, ermöglicht die Verbindung mit einer Datenbank. Einige dataProviders implementieren können nur eine Datenbank wieMySql
,PostgreSql
,Oracle
(diese werden nicht unterstützt nativ durch .Net), andere können eine Verbindung mit mehreren Datenbanken wie OleDb, da die Datenbank das unterstützt. Sehen Sie mehr hier auf dieser wie:http://msdn.microsoft.com/en-us/library/a6cd7c08(v=vs. 110).aspx
Wenn Sie mehr wissen wollen, werfen Sie einen Blick auf die
ADO.NET
Spezifikation. Es gibt einige Klassen und Konzepte, die wichtig ist, zu wissen, wieConnection
,Command
,Transaction
.http://msdn.microsoft.com/en-us/library/h43ks021(v=vs. 71).aspx
Unterschied zwischen Ihnen
Den Unterschied zwischen Ihnen ist der eine
Repository
implementiert die Datenbank-Persistenz verwendet eineData Provider
auf eine Datenbank zugreifen, so dass das repository kapselt ein Daten-provider.Dies ist ein wichtiges Prinzip, weil es schön ist, zu halten, eine lose Kopplung zwischen den Schichten Ihrer Anwendung, in anderen Worten, die anderen Ebenen will nicht wissen, wie es ist beibehalten, die von dem Repository, es ist einfach bestehen bleiben und das abrufen, wenn nötig.
Alle den Zugriff auf die Datenbank ist für die
DataProvider
innerhalb einerRepository
.Einem praktischen Beispiel, könnte eine Methode des repository:
Eigentlich, würden Sie nicht brauchen zu erstellen eine
PersonDataProvider
. DataProvider wird ADO.NET Klassen, die Ihnen eine Datenbank direkt zugreifen, mit Klassen, die implementiert Basis-Schnittstellen aus ADO.NET wieIDbConnection
,IDbCommand
,IDbTransaction
usw. Nun, wenn Sie wollen, nennen Sie Ihre Daten auf Klassen mit einemDataProvider
sufix, kein problem.Ich denke, es ist schön, einen
ORM
tool wieEntity Framework
oderNHibernate
Implementierung von access-Datenbank in ein Repository und nicht ADO.NET mit einem Datenprovider, verwenden und injizieren Sie einige Abhängigkeiten, die von diesem ORM wieISessionFactory
innerhalb des Repositorys contructor.DataProvider
vermittelt den Eindruck, dass Sie verweisen auf die ADO.NET bietet kein software-Ansatz.Repository und DataProvider sind zwei verschiedene Dinge.
Repository ist ein Muster, die Sie ergreifen sollten, während das Abfragen von Datenbanken. (genauso wie Sie in Ihrer Frage erwähnt)
DataProvider ist eine .net-Komponente, ruft Daten aus der Quelle, die Sie angegeben. Mehr auf .Net DataProviders hier: http://msdn.microsoft.com/en-us/library/s7ee2dwt%28v=vs.71%29.aspx