Laden...

MVVM - Woher kommen Stammdaten?

Erstellt von itstata vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.912 Views
I
itstata Themenstarter:in
302 Beiträge seit 2008
vor 13 Jahren
MVVM - Woher kommen Stammdaten?

Hallo,

ich bin gerade dabei mich in WPF einzuarbeiten und nutze dafür MVVM.
Im meinem Beispielprogramm können Personen, Adressen etc. verwaltet werden. Daher habe ich auch eine Sicht (PersonView) die genau eine einzelne Person mit Adresse und Anrede anzeigt.

Um die ComboBoxen mit z.B. Anreden zu füllen möchte ich diese als statische Datasource aus der DB laden. Ich bin allerdings noch etwas unsicher, was der bessere Weg ist - Daten über das ViewModel beziehen oder über eine globale Resource. In der Beispielanwendung von WAF (BookLibrary) werden beispielweise Programmsprachen in einer globalen Resource gehalten.

Ich persönlich finde die globalen Resourcen ziemlich unsauber, da ich wichtige Daten nicht im ViewModel habe. Hierzu würde mich Eure Meinung interessieren.

Gruß

5.742 Beiträge seit 2007
vor 13 Jahren

Ich bin allerdings noch etwas unsicher, was der bessere Weg ist - Daten über das ViewModel beziehen oder über eine globale Resource.

Verwende hier am besten das Repository-Pattern.

Erstelle ein Interface, das im einfachsten Fall einfach nur so aussieht:


public interface IPersonSource
{
  IEnumerable<IPerson> ProvideAllPersons();
}

Dieses Interface kannst du dann deinem ViewModel als Konstruktorargument übergeben (bzw. per DI-Container einfach injizieren lassen).

Dein ViewModel selbst muss dann die Models (also die _IPerson_s) nur noch in z.B. _PersonViewModel_s wrappen, sie einer ObservableCollection<PersonViewModel> hinzufügen, aus der dann mittels DataTemplates die entsprechenden Views generiert werden.

I
itstata Themenstarter:in
302 Beiträge seit 2008
vor 13 Jahren

Hallo erstmal danke für die Antwort!

Ein Repository für die Personen wird bereits über DI reingegeben. Es ist auch kein Problem, wenn die Viewmodels direkt mit den Repositories arbeiten?

Besten Gruß

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo itstata,

im ViewModel darfst du nicht direkt das Repository instanziieren. Du musst das mit einem Service Locator auflösen lassen. Alternativ kannst du das auch mit Dependency Injection machen. Wichtig ist nur, dass du nicht direkt auf _Repository _zugreifst, sondern auf IRepository.

zero_x

5.742 Beiträge seit 2007
vor 13 Jahren

Es ist auch kein Problem, wenn die Viewmodels direkt mit den Repositories arbeiten?

Gegenfrage: Wer soll denn sonst mit dem Repository arbeiten? 😉

Ich halte das durchaus für legitim - solange das ViewModel nicht die Aufgabe des Repositories übernimmt, besteht IMHO eine ordentliche Trennung.

I
itstata Themenstarter:in
302 Beiträge seit 2008
vor 13 Jahren

Alles klar...

danke für die Antworten, der Ansatz mit diesen globalen Resourcen fand ich eh Mist. Das Interface für das Repository hatte ich bereits übergeben...klappt so gut.