Verantwortlichkeit eines ViewModels

8

Ich baue ein Tool, welches das Ziel hat, eine Datei basierend auf ein paar Parametern herunterzuladen.

Erster Schritt ist das Einstellen (oder Abrufen) dieser Parameter.

Die verschiedenen Parametersätze werden von einem FileDownloadsManager abgerufen (sagen wir über Konfigurationsdateien): Er weiß genau, welche Parameter verwendet werden sollen, um die richtige Datei herunterzuladen.

diese Parameter sind in einer Klasse gespeichert, und ich habe eine Liste von Instanzen dieser Klasse.

Das bedeutet, dass ich meine Datei mit mehreren möglichen Parametersätzen herunterladen kann.

Um diese Parametersätze herum habe ich ParametersSetsViewModels erstellt, damit ich sie in einer Liste anzeigen und einige View-Only-Eigenschaften hinzufügen kann. Intern haben die ParametersSetsViewModels einen Verweis auf die zugrunde liegenden ParametersSets, die als Quelle für die Mitglieder des View-Modells verwendet werden.

Wenn ich jetzt meine Parametergruppe auswähle, möchte ich, dass die zugehörige Datei heruntergeladen wird.

Wessen Verantwortung sollte das sein?

Ich habe das Gefühl, dass wenn das ViewModel zu aktiv ist, eine Methode, die die heruntergeladene Datei zurückgibt, gegen das MVVM-Muster wäre; Was ist deine Meinung dazu?

Bonus: Der Download sollte im Hintergrund mit den asynchronen Methoden von BackgroundWorkers oder WebClient möglich sein.

    
Fabio Salvalai 16.08.2010, 22:21
quelle

1 Antwort

19

Mir scheint, dass jeder annimmt, dass MVVM keine Controller hat, da sie das C weggelassen haben. MVVM ist eigentlich eine Variante von MVC, "die einfach ViewModels hinzufügt".

Vielleicht sollte es stattdessen MVCVM genannt werden?

ViewModels sind nur dazu da, um den "GUI" -Code aus der Ansicht auszulagern und irgendwelche Daten zum Binden zu enthalten. ViewModels sollte keine Verarbeitung durchführen. Ein guter Test ist, dass Ihr ViewModel über automatisierte Komponententests testbar ist und keine Abhängigkeiten von Datenquellen usw. hat. Sie sollten keine Ahnung haben, woher die Daten stammen (oder wer sie anzeigt).

Obwohl es übersehen / vermieden werden kann, ist ein Controller dafür verantwortlich, zu entscheiden, welches Datenmodell angezeigt werden soll und in welchen Ansichten. Das ViewModel ist eine Brücke zwischen Modellen (das M in MVVM) und Views. Dies ermöglicht ein einfacheres "getrenntes" XAML-Authoring.

Als Antwort auf Ihre Frage sollte die Verarbeitung von einem Controller durchgeführt werden. Wenn das ViewModel aktualisiert werden muss, um Besetztzeichen usw. anzuzeigen, ist das zwar in Ordnung, aber es liegt nicht in der Verantwortung der View, des Models oder des ViewModels.

    
Gone Coding 18.08.2010, 12:22
quelle

Tags und Links