2009-05-05 9 views
3

Glenn Block und ich haben zusammen an dem ViewModel-Muster gearbeitet. Wir haben versucht, die größten Schmerzpunkte zu identifizieren, die mit dem Muster verbunden sind, mit dem Ziel, eine Rahmenunterstützung hinzuzufügen, um die Schmerzen zu lindern.Was sind die größten Probleme mit dem ViewModel-Muster?

Heute Abend veröffentlicht Glenn, “View Model” – the movie, cast your vote. Wir wollen von dir hören. Bitte posten Sie hier (und stimmen Sie ab), was die größten Schwachstellen beim Implementieren des ViewModel-Musters sind (auch bekannt als Model-View-ViewModel oder MVVM). Erzähle uns, wie das Framework dir das Leben erleichtern kann!

Wir suchen sowohl WPF und Silverlight.

uns also sagen, was wollen Sie den Rahmen zu tun Ansichtsmodell einfacher zu machen?

+4

Ich mag den Teil, der Stack OVerflow-Spam generiert. auch –

Antwort

5
  • Objektexplosion (Jetzt haben wir sowohl das Modell als auch ein Ansichtsmodell).
  • Zuordnung des Modells zum Viewmodel und umgekehrt.

Ich denke, beide sind notwendige Übel, aber sie sind Schmerzpunkte.

+0

Das Muster wie sieht es DRY verletzt (nicht wiederholen – ArielBH

0

Zu viele Eigenschaften zum Erstellen in der ViewModel-Klasse. Zumindest was ich gesehen habe, müssen Sie für jede Eigenschaft des UI-Elements, auf das Sie zugreifen/binden wollen, eine Eigenschaft in ViewModel erstellen, die zu viel zu wartenden Code enthält.

+0

selbst Das ist meine Erfahrung gewesen ist. Eine Ansicht von beliebiger Komplexität, das Ansichtsmodell wird schnell groß und unhandlich/Update zu erhalten. Die erstmalige Erstellung der Eigenschaften kann weitgehend automatisiert werden , aber es wird schnell schwierig, Code im ViewModel zu finden .. –

4

Kollektionen.

Ich möchte, dass mein Model eine Sammlung anderer Model-Objekte hat, aber meine GUI an eine Sammlung von ViewModel-Objekten bindet.

Ich kann einen ObservableCollection<TViewModel> in meiner ViewModel-Ebene erstellen und manuell mit einem ViewModel für jedes Element in der Model-level-Auflistung auffüllen. Das funktioniert gut - wenn das Programm startet. Was passiert aber, wenn der Benutzer auf die Schaltfläche Hinzufügen klickt? Oder die Schaltfläche Löschen? Oder nach oben/nach unten? Usw.

Ja, ich kann Code schreiben, um die ViewModel-Liste mit der Modellliste synchron zu halten, aber es gibt eine Menge subtiler Randfälle, und es ist eine Menge Arbeit (und viele Tests), alles zu bekommen die Details richtig. Dies ist ein gängiges Szenario und sollte in das Framework eingebettet werden. (Bitte?)

+0

Die Lösung, die ich dafür verwendet habe, besteht einfach darin, die Sammlungen des Modells auf ObservableCollection zu basieren - Sie fügen alles in Model hinzu (wo es hingehört), und die Änderungen werden weitergegeben zu VM und GUI. –

1

INotifyCollectionChanged unterstützt Benachrichtigung über Bereich von Änderungen, aber alle WPF Sammlung Kontrollen Wurfweite nicht Ausnahme unterstützt, wenn Sie versuchen, Bereich Update zu veröffentlichen. Das heißt, wenn Sie 10 Elemente zum Container hinzufügen, wird das Layout 10 Mal neu ausgewertet, was bei komplexen Steuerelementen ziemlich langsam ist!

Lösung wäre SuspendNotifocations und ResumeNotifications-Methoden zu Observable Sammlung hinzufügen, und alle WPF-Steuerelemente bewusst Bereich Updates (Use Case: Suspend, fügen Sie Elemente, Lebenslauf, alle Elemente auf einmal gezeichnet werden).