2016-03-29 12 views
0

Ich habe ein funktionierendes View-Model mit mehreren hundert Eigenschaften, die jeweils von einer oder mehreren Client-Ansichten konsumiert werden. Dies dient technisch seinem Zweck als Verkehrsdirektor, aber meine Sorge ist, dass die Wartung von Altfahrzeugen ein Albtraum sein wird. Ich habe versucht, dies in mehrere zusätzliche Klassen aufzuteilen und dann Singleton für jeden innerhalb der VM laufen zu lassen, aber das lässt den Front-End-Entwickler den Kopf kratzen, welches Instanz-Objekt zu irgendeiner gegebenen Zieleigenschaft führen wird. Ich habe versucht, die VM in partielle Klassendateien zu teilen. Dies funktioniert besonders gut für die Befehlsimplementierung, aber für Eigenschaften ist dies nicht realistisch (es gäbe Hunderte oder gar Tausende von Code-Dateien für die VM allein), und diese Richtung zu verlassen macht mich zu sehr abhängig von der F12-Taste (Sprung zur Definition)). Hat jemand anderes dieses Problem mit MVVM (oder sogar MVC) festgestellt? Ich brauche einen Weg, um diese Eigenschaftsdefinitionen ohne die Hilfe eines Rebreather zu verwalten!MVVM: Umgang mit sehr großen View-Modellen

+2

Im Allgemeinen gibt es bei MVVM ein Ansichtsmodell pro Ansicht. Es klingt, als würden Sie eine Reihe von Ansichten mit einem einzigen Ansichtsmodell unterstützen. Könnte das der Grund sein, dass Ihr View-Modell so viele Eigenschaften hat oder fehlt mir etwas? – devuxer

+0

Ich verwende den Maschinenzustand, um meine Ansichten zu verwalten. Diese Benutzeroberfläche hat insbesondere ungefähr 20 Ansichten, die alle aus derselben Datenquelle lesen. Es erschien mir nur natürlich, dass sie alle die gleiche VM teilen sollten. Vielleicht irre ich mich. – Jace

+0

Ihre Frage ist wahrscheinlich besser geeignet für [codereview.stackexchange.com] (http://codereview.stackexchange.com/) –

Antwort

3

Normalerweise würden Sie pro View eine ViewModel-Klasse haben. Eine Ansicht könnte ein Fenster, ein UserControl oder eine Seite sein. Es ist möglich, dass ein ViewModel als DataContext für Ihre gesamte Anwendung dient, aber der Gedanke erschreckt mich. Sie könnten in jeder Ansicht eine eigene ViewModel-Instanz auflösen.

Es ist schwierig, ohne zu sehen, den Quellcode und die Architektur Ihrer Anwendung

+0

Ich habe nie darüber nachgedacht, eine andere VM für jede einzelne Komponente der Anwendung zu haben. Wie würde ich den DataContext von Ansicht A von Ansicht B aktualisieren? – Jace

+0

Es hängt davon ab, wie sie verwandt sind. Am besten nutzen Sie ein Nachrichtensystem vom Typ "Publish-Subscribe" wie Prism's EventAggregator. –

+0

Die Vorteile eines gemeinsam genutzten DataContext-Objekts für mehrere Ansichten sind zu groß. Es muss irgendwo ein glückliches Medium sein. Vielen Dank für Ihr Feedback. – Jace

0

ich jede Ansicht hätte gedacht, ein eigenes Ansichtsmodell, das das zugrunde liegende Modell aktualisiert würde zu beraten und/oder Beobachtet Änderungen das zugrunde liegende Modell. Das Modell ist ein Domänenobjekt. Das Domain-Objekt ist der Kern der Architektur, die alle Extremitäten abstrahiert (DB, Services, etc.). Wenn eine Eigenschaft des Modells den Wert ändert, werden alle ViewModels, die die Änderung beobachten, von der Änderung aktualisiert, wenn das Modell von der Änderung benachrichtigt wird (z. B. nachdem die Persistenz erfolgreich war).

Verwandte Themen