2016-06-06 9 views
0

Nehmen wir an, ich habe eine Anwendung, die auf eine SQL-Datenbank zugreift. Die Datenbank hat zwei Tabellen:Wer ist dein Model?

  • Tiere; und
  • Rezepte

Ich habe ein In-Memory-Modell dieser Datenbank. Es gibt zwei Klassen - Animal und Recipe. Diese sind von INotifyPropertyChanged geerbt und verfügen über Eigenschaften, die 1-zu-1 den Feldnamen in der Datenbank zuordnen.

Um meine Datenzugriffsebene zu erstellen, habe ich zwei weitere Klassen - SqlAnimals und SqlReceipes. Jede Klasse verfügt über eine Load und eine Save Methode. Load Durchläuft die entsprechende Tabelle, um eine Liste von Objekten zu erstellen. Save verwendet eine Liste von Objekten, um eine Tabelle zu aktualisieren. Beispiel: SqlRecipes.Load gibt IList<Recipe> zurück und SqlRecipes.Save akzeptiert IList<Recipe> als Parameter.

Schließlich habe ich ein Formular namens RecipesView. Dies basiert auf einem ViewModel - einer anderen Klasse namens RecipesViewModel. RecipesViewModel erbt von INotifyPropertyChanged und enthält eine BindingList<Recipe> Eigenschaft.

Jetzt ist hier, wo ich ein wenig verwirrt bin. Im obigen Beispiel gehe ich davon aus, dass die In-Memory-Klassen und die SQL-Klassen alle als Modell-Teil von MVVM betrachtet werden. Bin ich jedoch richtig in der Annahme, dass das In-Memory-Modell könnte als ViewModel Teil betrachtet werden?

Kürzlich hörte ich, dass ein ViewModel nur Daten anzeigen sollte, die von der Ansicht angezeigt werden. Da das speicherinterne Modell über jedes einzelne Feld verfügt, handelt es sich nicht um ein ViewModel?

+1

Bitte sagen Sie mir, Sie ein Rezept für Ameisenbär Eintopf oder Giraffe Steaks in der Datenbank haben. – Will

+0

'links Join animal.id auf recipie.ingredientid' – Will

+0

Mehr wie' linken beitreten animal.id auf recipe.animal_portion_id'. Giraffe Steak und Riesen-Tintenfisch Ring Surfen und Rasen ist nicht die Frage – Mitkins

Antwort

1

In MVVM bezieht sich ViewModel auf das Modell, auf das von der Ansicht zugegriffen wird. Dies umfasst keine Modelle, die Teil Ihrer Datenebene sind.

Ihre Klassen (Darstellung von Objekten), deren Wert vom Ansichtsmodell abgerufen oder festgelegt wird, werden als Modell betrachtet. Solange Sie die Rolle Ihres Modells kennen, können Sie bei der Implementierung von MVVM unterscheiden, ob es sich um ein Model oder ein ViewModel handelt. Außerdem sind ViewModels normalerweise plattformabhängig und Modelle sind plattformunabhängig.

Siehe The MVVM Pattern

+0

Bedeutet dies, dass ich mit mehreren ViewModels enden kann sind ähnlich (aber nicht ganz dasselbe) wie die Modellklassen? – Mitkins

+0

@Camel ja, basierend auf Ihrem Design. Sie können ein geteiltes ViewModel oder ein ViewModel pro View erstellen. –

+0

Okay, also wenn ein Rezept eine 1 zu viele Beziehung mit Animals hat, dann würde mein RezeptViewModel eine Liste von AnimalViewModels haben? – Mitkins