Hallo,
ich habe gerade von VB (Access) zu C# "gewechselt". Hier möchte ich zum Ausprobieren und lernen eine kleine Kontaktedatenbank erstellen.
Bisher habe ich meine MySQL Tabelle mit ADO.NET über den MySQL-Treiber ausgelesen und in ein Dataset geschrieben, das funktioniert auch soweit. Jetzt möchte ich aber die Verschiedenen Schichten gleich von Anfang an "richtig" trennen. Zu diesem Thema habe ich mit das MVVM Pattern angesehen. Aber noch Verständnisfragen.
Ist das Model nur meine Datenbank oder auch der Code der die Daten aus der Datenbank anfragt und wieder speichert?
Dann würde in das VielModel "alles" kommen was mein Code für die Anzeige "vorbereitet"
Habe ich das so richtig verstanden?
Die Beispiele die ich gefunden habe nutzen meisten nur eine Classe aus der die Daten "kommen", leider keine Datenbank.
Gruß
Maik
MVVM ist (eher) ein UI-Pattern, keine Lösung für eine gesamte Software Architektur für das Trennen von Verantwortlichkeiten über die gesamte Applikation hinweg.
[Artikel] Drei-Schichten-Architektur
Das Model in MVVM hat prinzipiell nichts mit der Datenhaltung oder Applikationslogik zutun.
Prinzipiell ist dem MVVM auch "egal" woher die Daten kommen; es braucht nur eine Schnittstelle, wo die Daten angefragt werden (in der Regel aber die Logikschicht, nicht direkt auf die Datenbank).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
du mußt unterscheiden zwischen der allgemeinen [Artikel] Drei-Schichten-Architektur und MVVM. Bei MVVM (welches dann innerhalb der UI-Schicht eingesetzt wird) bezieht sich Model auf die Schnittstelle zur Business Logic, d.h. dort kommen keine Datenbank-spezifischen Methoden rein. Im ViewModel greifst du auf die Daten aus dem Model zu und bereitest diese für die View auf (bzw. analog in die andere Richtung).
Für ein kleines Textprojekt kannst du ein DataSet
(bzw. DataTable
) als Modell verwenden, bei größeren sollte man dann konkrete (eigene) Klassen dafür verwenden (denn selten sind die Daten reine Tabellen).
Ganz allgemein gesagt zieht sich die Schichtentrennung durch die gesamte Anwendung. Es gibt auch kein richtig und falsch, wie viele Diskussionen dazu im Forum zeigen. Aber die Frage "Mache ich es richtig?" kann man sich eigentlich immer mit "Kann ich meinen Code testen?" beantworten. Wenn du Funktionen aus allen Schichten deiner Anwendung mit Unit-Tests abdecken kannst, dann hast du die Veantwortlichkeiten richtig getrennt. Wenn nicht, dann nicht.
Ein paar Stichworte, die dir weiterhelfen könnten, wären z.B. noch: Dependency Injection / IoC, Mocking, Repository Pattern / Unit of Work, und [Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio
Weeks of programming can save you hours of planning
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Danke für die zahlreichen Anworten. Ich werde mir die Artikel am Wochenende durchlesen und dann berichten oder ggf. weitere Fragen stellen.
Gruß
Und falls du ihn noch nicht gelesen hast: [Artikel] MVVM und DataBinding