Ich habe mehrere Konfigurationen für die Speicherung von Informationen in der Datenbank gesehen. Im Allgemeinen scheinen drei Arten von Designs in meiner Ecke der Welt üblich zu sein:
- Der Controller verwaltet die Persistenz
- Modell verwaltet die Persistenz
- Die Bibliothek eines Drittanbieters verwaltet die Persistenz und erfordert normalerweise einige Anmerkungen zum Modell.
Ich frage mich, welche Konfiguration (falls vorhanden) konzeptionell am einfachsten zu verwenden / am kompatibelsten mit einer MVC-Architektur ist.
(Wenn es sich nicht um eine von mir aufgeführte handelt, geben Sie bitte einen kurzen Überblick als Teil der Antwort.)
In der Realität handelt es sich bei MVC meistens um ein UI-Implementierungsmuster, daher ist die Frage etwas umstritten. Es gibt jedoch wirklich nur zwei große Optionen. Ihr Controller sendet normalerweise Anforderungen zum Laden oder Speichern von Entitäten in Ihrem Modell, indem er entweder 1) eine Dienstschicht oder 2) das Active Record-Muster verwendet.
Die Serviceschicht kann eine beliebige Anzahl von Formen annehmen, obwohl ich es persönlich vorziehen würde, mit einer Repository-Abstraktion für die aggregierten Stammentitäten zu arbeiten, deren konkrete Implementierungen entweder mit einer Art ORM oder einem einfachen DAO oder einer API für einen nicht relationalen Speicher, wenn dies für die Anwendung sinnvoll ist.
Das Active Record-Muster bedeutet, dass Ihr Modell für die Persistenz verantwortlich ist, obwohl es normalerweise bedeutet, dass eine Basisklasse die Zuordnungen zu Ihrem Geschäft verwaltet, sodass Ihr Modell nicht wirklich so direkt involviert ist.
Grundsätzlich sendet der Controller Anforderungen an persistente Objekte, unabhängig davon, ob dies ein Aufruf an Ihr Repository, Ihre UnitOfWork-Implementierung oder die Save-Methode für Ihre Entitäten ist. Wenn Sie Repositorys verwenden, sind Ihre Modellobjekte persistenzunabhängig.
quelle
In einem MVC-System (Model-View-Controller) enthält das Modell die Daten. Ich glaube also, dass die Datenbankpersistenz drin sein sollte.
quelle
Die meisten MVC-Beispiele auf hoher Ebene, die ich gesehen habe, haben eine separate
infrastructure
Ebene, die den tatsächlichen Code für die Datenbankimplementierung enthält (dh die spezifischen Aufrufe von NHibernate oder EF oder Linq oder was auch immer Ihre Datenebene ist), während die Ebene "Modell" (häufig auch) Die "Domain" -Schicht enthält die Schnittstellen , die die Datendienste definieren.quelle
Die Standardpraxis in MVC besteht darin, Datenstruktur und Persistenz in die M-Schicht (Odel-Schicht) aufzunehmen.
Die Modellebene enthält nicht nur die Klassen (POCOs usw.), die Sie in Ihrer Anwendung verwenden werden. Sie enthalten die Repositorys für diese Klassen.
Ein Beispiel wäre ein Repository, in dem Sie mehrere Datenklasseninstanzen haben, z.
Sie können Ihre Modelldomäne viel besser organisieren und haben auf viele Arten Zugriff auf Ihre Daten. Die Daten- / Modellschicht ist jedoch kompakt und robust
quelle