Welche theoretische Grundlage haben Sie für das Datenbankdesign "Repository-Muster" gefunden? Ich vermute keine. Es ist eine Schicht von Komplexität, die auf einer falschen Prämisse beruht: dass die "Persistenzschicht" etwas ist, von dem Sie isoliert werden müssen. Soweit ich das beurteilen kann, spielt es eine Rolle, die Unkenntnis der relationalen Entwurfsprinzipien in der Programmierung zu verbreiten und die vorausgesetzte Zentralität des OO-Entwurfs der Anwendung zu beeinträchtigen. Aber es rechtfertigt seine Existenz nicht aus rationalen, geschweige denn theoretischen Gründen.
Der einzig wahre Weg zum Datenbankdesign hat sich in 30 Jahren nicht geändert: Analysieren Sie die Daten. Finden Sie die Schlüssel und Einschränkungen und viele-zu-eins-Beziehungen. Gestalten Sie Ihre Tische nach Boyce-Codd Normalform. Verwenden Sie Ansichten und gespeicherte Prozeduren, um den Datenzugriff zu erleichtern.
Ein SQL-DBMS bietet eine bessere Isolationsschicht als alles, was der Programmierer bieten kann. Wenn sich die Datenbank ändert, muss sich möglicherweise auch die für den Zugriff verwendete SQL ändern. Beachten Sie jedoch, dass dies unabhängig davon gilt, ob es eine Vermittlungsebene gibt oder nicht . Solange die Anwendung Ansichten und gespeicherte Prozeduren verwendet, um auf das DBMS zuzugreifen, zeigen gewöhnliche SQL-Engineering-Tools an, wenn Änderungen an der zugrunde liegenden Datenbank diese Ansichten und gespeicherten Prozeduren ungültig machen.
Darin liegt natürlich die Herausforderung. Eine Vermittlungsebene vermittelt dem Programmierer die Illusion von Isolation und den Komfort, Code zu schreiben, den er zu tun weiß. Das Erlernen von Datenbankdesign und SQL erfordert das Erlernen von etwas Neuem. Die meisten Menschen würden lieber sterben als denken, und viele haben Erfolg.
Jemand in Ihrem Team wird zweifellos beanstanden, dass das Schreiben von SQL zur Unterstützung Ihrer 200 Klassen eine Menge Arbeit ist. Ohne Zweifel. Aber zumindest ist es nützliche Arbeit. Wenn Sie eine Datenbank entwerfen, indem Sie Ihr OO-Design imitieren, werden Sie auch viel Arbeit erledigen, viel davon unbrauchbar, und das meiste, was das DBMS Ihnen bietet, zunichte machen.
Beispielsweise erwägen Sie, die Arbeitseinheit in der Datenbank wiederzugeben (vermutlich als Tabelle oder als Tabellen). Arbeitseinheit ist eine integrierte Service des DBMS: begin transaction
... Update - Datenbank ... commit transaction
. Nichts zu modellieren, außer die Zuordnung Ihrer Klassen zu den Datenbanktabellen in SQL.
Ihre Frage wurde vor 4 Jahren gestellt. Ich antworte, weil es in letzter Zeit auf irgendeine Weise "aktualisiert" wurde, was darauf hinweist, dass es für jemanden immer noch von Interesse ist. Ich hoffe, dass meine Antwort den Leser ermutigt, die grundlegende relationale Theorie auf das Problem anzuwenden, anstatt eine sinnlose Problemumgehung anzuwenden.