2009-08-20 17 views
3

Hier ist das Szenario:WPF-Design Frage (Custom Controls oder mvvm)

  • Ich habe eine visuelle, dass einige Daten
  • Die Daten für die visuelle Anzeige kann in eine von zwei Arten kommen
    1. Via Benutzereingabe über die Tastatur oder Maus
    2. über einige Back-End-Quelle
  • diese beiden Dateneingänge können einer von zwei Formen annehmen
    1. Steuerdaten oder
    2. Rohdaten zur einfachen Anzeige
  • Steuerdaten führen zu Veränderungen in den visuellen
  • Rohdaten ist einfach gezeigt, wie

Mit anderen Worten, die Ansicht wird von zwei Mastern bedient, nämlich Benutzereingabe und Backend-Eingabe. Ein Beispiel wäre ein Multi-User-Spiel, bei dem die Visuals von der Benutzereingabe gesteuert werden, aber auch die gleichen Visuals, die von einigen Backend-Inputs gesteuert werden (zB tcp/ip). Ein weiteres Beispiel wäre ein Terminal-Emulator, die Eingänge Benutzer erhält, sondern auch Daten bekommt aus einer anderen Quelle, es Telnet oder serielle usw.

Ich dachte an eine WPF-Steuerelement für die visuelle schreiben. Mit anderen Worten, ist eine Blackbox, die die Eingaben interpretiert und die Ergebnisse anzeigt. Das Eingeben von Benutzereingaben in dieses benutzerdefinierte Steuerelement ist einfach, da Sie nach den entsprechenden Ereignissen des Typs Ausschau halten und diese nach Bedarf behandeln können. Wie kann man jedoch auf die Eingänge vom Backend warten? Das Freilegen einer Abhängigkeitseigenschaft, an die eine Bindung gebunden ist, führt nicht dazu, dass Sinn macht, sondern dass eine Methode auf dem visuellen Objekt, die mit den Daten aufgerufen wird, auch keine Sinn ergibt.

Eine weitere Option ist die MVVM-Architektur, bei der das Modell die Back-End-Datenquelle ist und das Ansichtsmodell die gesamte Arbeit erledigt. Es erhält sowohl die Backend-Daten (über das Modell) als auch die Benutzereingaben (über entsprechende Befehlsbindungen oder Ähnliches) und es macht sinnvollen Sinn und bindet sich an die View, um diese Änderungen anzuzeigen.

Der Vorteil der Zollkontrolle ist, dass er als Kontrolle verbraucht werden kann, dass von selbst kümmert, so dass die Verbraucher sehr wenig Arbeit zu tun hat es zu verwenden, aber das Problem ist, Daten aus dem Backend bekommen . Die MVVM-Methode ist vorteilhaft, weil sie die Verarbeitungslogik, die Ansicht usw. gut kapselt. Das Problem ist, dass dieses Muster für jedes Backend wiederholt werden muss. So machen die visuellen sehr blank Knochen und alle Verarbeitungslogik außerhalb der Kontrolle ausgesetzt. Grundsätzlich möchte ich , um es sehr einfach zu konsumieren, so dass jemand es nehmen und ohne Hinzufügen von zu viel externe Logik zu tun, Verarbeitung etc. Alles, was sie bieten, ist ihre Back-End-Daten Quelle in das Visual Feeds.

Sorry für diese lange Post aber ich lerne WPF und das ist ein interessantes Design Frage für mich. Alle Ideen, Kommentare, etc. willkommen.

Danke fürs Lesen.

Antwort

5

Ich würde definitiv das MVVM-Muster verwenden. Sie erhalten in Ihrem Code eine sehr gute Trennung der Probleme und Ihr Viewmodel kann auch außerhalb der Benutzeroberfläche getestet werden. Sie können Ihre Ansicht möglicherweise auch unter Überblendung bearbeiten. Ich glaube nicht, dass das Anschließen des Viewmodels an das Backend komplizierter ist als das Verbinden eines benutzerdefinierten Controls. Sie können sich dafür entscheiden, die Abhängigkeitsinjektion oder einen Service Locator zu verwenden, um Dinge zu verbinden. Durch die Verwendung all dieser Entwurfsmuster erhalten Sie eine entkoppelte und testbare Lösung.

+1

Martin, Vielen Dank für Ihre Anregungen. Ich kann sicherlich sehen, dass das MVVM-Muster hier gut passt, aber was ich Probleme habe, meinen Kopf zu wickeln, ist, dass ich dieses Ding leicht konsumierbar machen möchte und dass ich das Hinzufügen von MVVM in die Gleichung bricht Blackbox Natur des Designs zwingt wer auch immer es verwendet, um auch das Muster zu folgen und die entsprechenden Haken (Modell lesen), die in die Architektur stecken. Vielleicht fehlt mir etwas allgemeines Designwissen, das dieses Problem beheben wird. Ich werde die Designmuster untersuchen, die Sie vorgeschlagen haben. Danke. – HiteshP