Implementieren Sie ein generisches Repository-Muster mit alten Ado.net

8

Ich versuche das Repository-Muster mithilfe von ado.net zu implementieren, weil die Plattform limitiert ist.

%Vor%

Wie vervollständige ich die folgende abstrakte Klasse ...?

%Vor%

Aktualisierung:
Ich werde das Domain-spezifizierte Repository später implementieren, indem diese zwei Schnittstellen / Klassen inhärent sind.

%Vor%     
ca9163d9 23.05.2012, 21:12
quelle

4 Antworten

6

Es ist generell keine gute Idee, ein generisches Repository zu haben. Repository ist ein wichtiges Domänenkonzept und Sie möchten es nicht übergeneralisieren, genauso wie Sie Ihre Entitäten nicht verallgemeinern möchten. Das generische Repository ist CRUDy und verschiebt den Fokus von Ihrer Domain weg. Bitte beachten Sie diesen Artikel von Greg Young .

Wenn Sie IQueryable angeben, wird neben der Erstellung Ihres Codes eine enge Kopplung eingeführt weniger Domäne und mehr Daten getrieben.

    
Dmitry 23.05.2012 21:25
quelle
0

Sie versuchen, einen Teil von dem zu erstellen, was ein typischer OR-Mapper tut. Dies ist ein Los der Arbeit. Warum nicht einfach ein ORM verwenden?

    
usr 23.05.2012 21:21
quelle
0

Wenn Sie aus einer alten Datenbank kommen, die mit Inkonsistenzen und einer Unmenge an gespeicherten Prozeduren gefüllt ist, und Sie versuchen, sie mit einem ORM / Repository-Muster zu verbinden, werden Sie vielleicht wirklich frustriert sein, ein Generic zu implementieren Repository-Muster.

Ich weiß, dass generische Repository-Muster in den Tutorial-Abschnitten in diesen Tagen ein riesiger Erfolg sind, wenn viele neuere Apps Dinge wie Entity Framework und Active Record zur Erstellung der Datenbanken zulassen (denken Sie daran, dass diese Art keine gespeicherten Prozeduren oder minimale Verwendungen von ihnen beinhaltet). In diesen neueren Szenarien tendieren die Daten dazu, ein wenig sauberer zu sein und machen es sehr einfach, sie an ein generisches Repository-Muster anzuschließen, da jede Entität ziemlich genau eine ID hat.

    
Max Alexander 11.04.2013 15:18
quelle
0

Nicht ganz zum Thema, aber ich hatte ähnliches Problem, und hier ist meine Lösung (kann jemand helfen)

Erstelle Identitätsklasse:

%Vor%

Entyty-Klasse erstellen:

%Vor%

Repository-Schnittstelle (Sie können auch nur eine abstrakte Klasse verwenden):

%Vor%

Create Generische abstrakte Klasse:

%Vor%

Und implementieren Sie EmployeeRepository:

%Vor%

das ist alles. Verwenden Sie im Code:

%Vor%     
Alexander Brattsev 01.11.2017 08:51
quelle