Soll ich Business des UI in WPF separaten Objekten?
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?
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 DataTemplate
s 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ürData 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 verwendenINotifyPropertyChanged
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
undwhy should you not
vor jeder Entscheidung!