Frage

WPF Ansicht Modell orientierte Art, die Dinge macht es sehr verlockend, nur Business-Objekte in der Benutzeroberfläche zu verwenden. Haben Sie mit diesem alle Probleme gesehen? Warum oder warum sollte man das nicht tun?

War es hilfreich?

Lösung

Die Führung von der Microsoft-Produktteams (zum Beispiel, das ist, was die Mischung Team verwendet) ist die Model-View-Viewmodel-Architektur, eine Variante des beliebten MVC-Musters. Ein guter Ausgangspunkt ist http://blogs.msdn.com /johngossman/archive/2005/10/08/478683.aspx . Es gibt auch gute Artikel von Dr. WPF zu diesem Thema.

Im Wesentlichen treten sie für eine Ansichtsmodell Schicht zu erzeugen, die verwendete Bindung freundliche Business-Objekte, wie ObservableCollection und dergleichen.

Auch wenn Sie schließlich in Silverlight 2 bewegen könnte, möchten Sie vielleicht die Business-Objekte aus der UI-Ebene zu halten, so dass Sie UI-Technologie auslagern können (bis WPF und Silverlight werden Source-Code-kompatibel).

Andere Tipps

Ich glaube, ich es in einem anderen Licht zu sehen. Ich versuche, so viel aus dem UI wie möglich zu halten, damit ich mir je nachdem, welche UI-Präsentation verwenden muß (dh. Web, WPF, WinForms). Je mehr Business-Logik in der Präsentationsschicht, desto mehr können Sie später neu zu schreiben, wenn Sie auf einem anderen UI migrieren.

Es ist kein Problem, die Business-Objekte in der Benutzeroberfläche, solange alles, was Sie tun, ist sehen sie. Mit anderen Worten, wenn Sie die Eigenschaften eines ändern mögen, oder eine löschen oder einen neuen erstellen, sollten Sie eine Nachricht an den Controller, Moderator entsenden, oder was auch immer, das zu tun; und die Ergebnisse sollten dann in der Ansicht aktualisiert werden.

Was Sie sollte nicht zu tun ist, um die ToString Methode Ihrer Objekte verwenden (oder andere Methoden oder Eigenschaften auf Objekte) zu beeinflussen, wie sie in der Ansicht erscheinen werden. Sie sollten DataTemplates verwenden, um die Ansicht Ihrer Objekte darzustellen. Wenn Sie eine komplexere Darstellung benötigen, können Sie ein IValueConverter, um das Objekt in seine visuelle Darstellung zu ändern.

Nicht einen WPF-Guru zu sein, kann ich nicht sicher sein, aber der üblichen Grund für Ihren M trennt, V und C ist, so können Sie den Controller testen unabhängig von der Sicht, und umgekehrt.

Nichts hindert Sie, natürlich, aber es sollte viel mehr prüfbar (dh Unit-Tests), wenn es getrennt ist. Die MVP-Muster, die in der Regel derjenige, der MS fördert, ist mehr Getriebe um den Moderator (dh Ihre WPF-Form) mehr Kontrolle, und das ist auch in Ordnung ....

Je nach Anwendungsarchitektur oder die auf dem Weg planen Sie Ihre Komponenten und Objekte wiederverwenden, können Sie ein gewisses Maß an Unabhängigkeit von der Benutzeroberfläche (in diesem Fall WPF) wählen.

Hier ist ein Beispiel von meiner Erfahrung:

  

Ich habe mit WPF nur ein wenig gearbeitet, auf   ein relativ kleines Projekt, in dem die   Business-Schicht wurde bereits definiert,   und wir brauchten nur einen Benutzer erstellen   Schnittstelle. Natürlich ist die Schnittstelle   definiert hatte ist es eigene Regeln und Objekte   dass es die Arbeit mit, und weil   nur wurde die Anwendung definiert   UX wir gewählt haben, unsere eigene erstellen   spezifische Objekte, meist durch Ausdehnen   DependencyObject (hauptsächlich für Data Binding Zwecke).

     

können Einige Leute argumentieren, dass es nicht in Ordnung,   verwenden Abhängigkeits Objekte, weil sie   nicht serialisierbar sind (sie tatsächlich   sind - zu XAML), bringen sie ein   Abhängigkeit zu WPF (die   System.Windows Namespace), und einige   andere Argumente. Ebenfalls,   DependencyObjects Unterstützung anderer   Optionen, wie angebracht Eigenschaften   und Abhängigkeitseigenschaften . Andere   vielleicht gefallen zum Beispiel verwenden    INotifyPropertyChanged wenn es   Sinn macht, und andere vielleicht sagen, dass   alle diese Muster gehören nicht in den   andere Schicht als UI.   (Wenn Sie möchten mehr dort erfahren sind   einige gute WPF Datenbindung   Artikel in der MSDN-Bibliothek,   einschließlich der bewährten Verfahren für   perfomance und für User Interface)

Es ist irgendwie schlecht, dass Microsoft einige der Leckereien zum System.Windows Namespace statt, beispielsweise hinzuzufügen, zu dem System.ComponentModel gewählt hat, wo meiner Meinung nach könnten sie nützlicher gewesen sein (durch all diese wichtigen Mustern bietet nicht nur auf WPF, sondern den .NET Framework).

Natürlich ist dies nur der Anfang und viele von uns wissen, dass das, was wird am Ende in die richtige Richtung entwickelt. (Mit dem Risiko, etwas nicht zum Thema:.. Nehmen Sie Silverlight-2.0-Framework zum Beispiel war es ein gehetztes Release, mit einigen der Objekte in dem WPF-Modell fehlen und einig nicht in ihrem natürlichen Ort)

  

Am Ende hängt alles von Ihnen, Ihr Programmierstil, Ihre architektonischen Entscheidungen und Ihr Wissen über die Technologie.

     

Wenn es natürlicher scheint es, in einer Art und Weise zu tun, als durch das Buch, denkt why you should und why should you not vor jeder Entscheidung!

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