2009-04-24 11 views
9

Wenn Sie eine Repository-Klasse erstellen, die Ihre gesamte Persistenzlogik für eine bestimmte Entität kapselt, z. B. PersonRepository, aber Ihre Repository-Klasse das Unit of Work-Muster oder das Identity Map-Muster nicht implementiert, wird sie dennoch als Repository betrachtet? Mit anderen Worten: Sind für eine Repository-Implementierung Unit of Work und Identity Map erforderlich oder können wir einfach jede Klasse aufrufen, die unsere Persistenzlogik als Repository enthält?Ist ein Repository immer noch ein Repository ohne Arbeitseinheit?

Ich sollte eine Sache hinzufügen. Wenn ein Repository diese Muster nicht benötigt und es eigentlich nur ein Container für Persistenzmethoden ist, was ist dann der Unterschied zwischen einem Repository und einem DAO (Data Access Object)? Erstellen wir einfach mehrere Namen für das gleiche Objekt oder fehlt uns ein Teil dessen, was ein Repository sein soll?

Antwort

3

Ja, es ist immer noch ein Repository.

Wie für Repository == DAO, denke ich, Repository sollte auf Business-Logik-Ebene und DAO sollte auf Datenzugriffsschicht sein, d.h. ich denke, sie sind auf verschiedenen Ebenen. Soweit ich weiß, ruft das Repository DAO-Methoden auf, um Daten zu laden und persistent zu machen.

3

Ich würde sagen, die Repository und Unit of Work-Muster sind orthogonal.

Sehr oft möchte ich, dass eine einzelne Arbeitseinheit die Operationen auf mehreren Repositorys überspannt, also würde eine Implementierung davon in eine höhere Ebene gehören.

1

Aufbauend auf was Sii sagte - es scheint besser zu mir, wenn das Repository und die Einheit der Arbeit nicht verwandt sind. Trennung von Sorgen?

1

Wenn Sie die Trennung von Bedenken berücksichtigen, denken Sie daran, dass Ihr Repository über die Implementierungsmethoden für die Datenspeicherung verfügt, so dass Sie das aus Ihrem Hauptcode heraushalten können. Dies ist sowohl beim Komponententest als auch beim endgültigen Austauschen der Datenspeicherimplementierung hilfreich (ein Beispiel für eine Datenspeicherimplementierung wäre LINQ-to-SQL in ASP.NET).