90 Stimmen

Wie verwendet man das Repository-Muster richtig?

Ich frage mich, wie ich meine Repositories gruppieren sollte? Wie aus den Beispielen, die ich auf der asp.net mvc gesehen und in meinen Büchern verwenden sie im Grunde ein Repository pro Datenbanktabelle. Aber das scheint wie eine Menge von Repositories führen Sie zu haben, rufen Sie viele Repositories später für Mocking und Zeug.

Ich denke also, ich sollte sie gruppieren. Ich bin mir jedoch nicht sicher, wie ich sie gruppieren soll.

Momentan habe ich ein Registrierungs-Repository erstellt, um alle meine Registrierungsdaten zu verwalten. Allerdings gibt es etwa 4 Tabellen, die ich aktualisieren muss, und bevor ich 3 Repositories hatte, um dies zu tun.

Eine der Tabellen ist zum Beispiel eine Lizenztabelle. Wenn sie sich registrieren, schaue ich mir ihren Schlüssel an und prüfe, ob er in der Datenbank vorhanden ist. Was passiert nun, wenn ich diesen Lizenzschlüssel oder etwas anderes aus dieser Tabelle an einem anderen Ort als der Registrierung überprüfen muss?

Ein Punkt könnte die Anmeldung sein (prüfen, ob der Schlüssel nicht abgelaufen ist).

Was würde ich also in dieser Situation tun? Den Code noch einmal neu schreiben (DRY brechen)? Versuchen, diese 2 Repositories zusammenzuführen und hoffen, dass keine der Methoden zu einem anderen Zeitpunkt benötigt wird (z. B. könnte ich eine Methode haben, die prüft, ob userName verwendet wird - vielleicht brauche ich das an anderer Stelle).

Auch wenn ich sie zusammen verschmelzen würde ich entweder 2 Service-Schichten, die auf das gleiche Repository gehen, da ich denke, mit der ganzen Logik für 2 verschiedene Teile einer Website wäre lang und ich müsste Namen wie ValidateLogin(), ValdiateRegistrationForm(), ValdiateLoginRetrievePassword() und etc. haben.

Oder das Repository trotzdem anrufen und einfach einen seltsam klingenden Namen verwenden?

Es scheint schwer zu sein, ein Repository zu erstellen, dessen Name allgemein genug ist, so dass man es für viele Bereiche der Anwendung verwenden kann und es trotzdem Sinn macht, und ich glaube nicht, dass der Aufruf eines anderen Repositorys in einem Repository eine gute Praxis wäre.

0voto

Sly Punkte 14578

Ich empfehle Ihnen einen Blick auf Scharfe Architektur . Es wird empfohlen, ein Repository pro Entität zu verwenden. Ich verwende es derzeit in meinem Projekt und bin mit den Ergebnissen sehr zufrieden.

0voto

ColacX Punkte 3762

Das Repository-Muster ist ein schlechtes Entwurfsmuster. Ich arbeite mit vielen alten .Net-Projekten, und dieses Muster führt in der Regel zu Fehlern wie "Verteilte Transaktionen", "Partial Rollback" und "Connection Pool Exhausted", die vermieden werden könnten. Das Problem ist, dass das Muster versucht, Verbindungen und Transaktionen intern zu handhaben, aber diese sollten in der Controller-Schicht behandelt werden. Außerdem abstrahiert das EntityFramework bereits einen Großteil der Logik. Ich würde vorschlagen, stattdessen das Service-Muster zu verwenden, um gemeinsamen Code wiederzuverwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X