Frage

Ich arbeite an einer WPF-Anwendung und strukturiere sie mithilfe des MVVM-Musters.Ursprünglich hatte ich die Idee, dass die ViewModels wiederverwendbar sein sollten, aber jetzt bin ich mir nicht mehr ganz sicher.

  • Sollte ich meine ViewModels wiederverwenden können, wenn ich ähnliche Funktionen für eine WinForms-Anwendung benötige?
  • Silverlight unterstützt nicht alle Funktionen von WPF – sollte ich es für Silverlight-Anwendungen wiederverwenden können?
  • Was ist, wenn ich eine Linux-GUI für meine Anwendung erstellen möchte?Dann brauche ich das ViewModel zum Erstellen in Mono – sollte ich das anstreben?
  • Und so weiter..

Also;Sollte man ViewModel-Klassen mit Blick auf eine bestimmte Ansicht schreiben oder an Wiederverwendbarkeit denken?

War es hilfreich?

Lösung

Um Ihre Frage zu beantworten, denken Sie an das Prinzip der Einzelverantwortung:

"Eine Klasse sollte einen und nur einen Grund zur Veränderung haben."

Ich würde sagen, im Rahmen der Vernunft möchte man ein ViewModel normalerweise nicht für mehrere Ansichten wiederverwenden.Der Hauptgrund, warum ich dafür plädiere, ist, dass dies Ihrem ViewModel mehr als einen Grund für eine Änderung geben würde.Mit anderen Worten, es müsste sich ändern, wenn sich die eine oder andere Ansicht ändert, und meiner Meinung nach sind das zwei Gründe für eine Änderung.Wo hört es auf?In diesem Fall würde ich es einfach halten und ein ViewModel an die Ansicht binden.

Eine weitere Sache, über die man bei MVVM mit WPF nachdenken sollte, ist die Datenvorlage.Dies ist viel einfacher zu erreichen, wenn jedes ViewModel genau eine Ansicht bedient.

Andere Tipps

Wenden Sie im Allgemeinen das YAGNI-Prinzip an – Sie werden es wahrscheinlich nicht brauchen.Sofern Sie nicht erkennen, dass diese Dinge möglicherweise passieren, würde ich beim einfachsten Ansatz bleiben, um Ihre Software für die Anforderungen, die Sie derzeit haben, zum Laufen zu bringen.

In meinen Gedanken, Das Hauptziel von MVVM besteht darin, Code zu eliminieren, der nicht einfach durch Unit-Tests getestet werden kann.Da ein Ansichtsmodell Unit-Tests unterzogen werden kann, eine Ansicht jedoch nicht, wird dies erreicht, indem die Ansicht so dumm wie möglich gemacht wird.Im Idealfall ist die Ansicht, wie dies mit XAML möglich ist, vollständig deklarativ und bindet nur Daten an ein Ansichtsmodell.Daher das „Kein Code dahinter“-Mantra.

Die Wiederverwendbarkeit des Ansichtsmodells über verschiedene UI-Technologien hinweg ist nicht wirklich ein Ziel von MVVM.Wenn Sie es versuchen, werden Sie wahrscheinlich versucht sein, Code, der für die UI-Technologie spezifisch ist, erneut in die Ansicht zu verschieben, um das Ansichtsmodell wiederverwendbar zu halten.Dies würde dem Hauptziel der Testbarkeit zuwiderlaufen.

Wenn Sie tatsächlich feststellen, dass Sie unterschiedliche UI-Technologien unterstützen müssen, können Sie die gemeinsame Logik der Ansichtsmodelle dennoch in eine gemeinsame „Präsentations“-Ebene ausgliedern.Ich würde das jedoch nicht tun, bis ich sicher bin, dass es notwendig ist.

Dies ist eine alte Frage, daher zögere ich, eine weitere Antwort hinzuzufügen.Aber alle bisher geposteten Antworten haben das Wesentliche verfehlt. Die Antwort von MSDN ist ganz klar:Das ViewModel ist ganz speziell dafür gedacht, von vielen Ansichten auf verschiedenen Betriebssystemen gemeinsam genutzt zu werden, wie in dieser Abbildung gezeigt:

enter image description here

Andernfalls würde es unweigerlich zu redundantem Code kommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top