2010-04-28 9 views
8

[Disclaimer: Ich bin ASP.NET MVC Entwickler]Silverlight 4 WCF RIA Services und MVVM ist nicht so einfach

Hallo,

Ich bin mit der Umsetzung MVVM Muster für einige Best Practices suchen mit WCF RIA in Silverlight 4.

Ich bin nicht auf der Suche nach MEF von IoC zum Auffinden meiner ViewModels. Was ich gerne wissen würde ist, wie man MVVM-Muster mit Silverlight 4 und WCF RIA anwendet.

Ich möchte nicht andere Sachen wie Prism oder MVVM Light Toolkit verwenden. Ich habe viele Beispiele im Internet gefunden, die zeigen, wie wunderbar es ist, eine Datenquelle per Drag & Drop auf die Ansicht zu ziehen und der Job ist erledigt (es erinnert mich an meine ersten VB6-Entwicklungen).

Ich habe versucht, MVVM mit WCF RIA zu implementieren und es ist überhaupt nicht strightforward. Wenn ich das verstehe, sollte die MVVM die gesamte Logik enthalten, um sie isoliert testen zu können, aber wenn es darum geht, sie mit WCF RIA zu kombinieren, ist das eine andere Geschichte. Ich habe folgende Fragen.

  1. Kann ich generierte Metadaten als Modell verwenden? Es wäre einfacher, es zu benutzen, wenn ich alles von Grund auf schreibe.

  2. Wie ich den einzigen Weg sah, konnte ich Daten durch DomainContext erhalten oder durch direkte Bindung in der Ansicht (lokale Ressource). Ich will nicht die direkte Bindung in der Ansicht, überhaupt nicht überprüfbar. Auf der anderen Seite kann ich DomainContext nicht verwenden, es stellt keine einzige Entität dar !!! Alles, was ich habe, ist das EntitySet, das ich an Datagrid binden kann. Wie binde ich eine einzelne Entität vom ViewModel an das DataForm?

  3. Wie uppte ich das Modell an die Datenbank?

  4. Wie navigiere ich von einer Entität zu einer Sammlung ihrer Elemente. Zum Beispiel, wenn ich eine Firmen-Entität habe, möchte ich ein DataForm anzeigen, um eine Entitätsinformation zu aktualisieren, und ein Datagrid, um Firmenadressen anzuzeigen. Beim Speichern eines Formulars möchte ich eine Information an das Unternehmen und eine Information an die Adresse speichern, welche Adresse als aktiv ausgewählt wurde.

Bitte helfen Sie mir zu verstehen, wie es gut geht. Oder vielleicht sollte ich die WCF RIA fallen lassen und es mit WCF von Grund auf neu machen?

Was denkst du?

Antwort

9

Das könnte Sie auch interessieren session. Es wird erläutert, wie das MVVM-Muster mit RIA WCF Services verwendet wird.

+0

würde auf jeden Fall empfehlen, den Beispielcode 'BookClub' aus diesem Artikel zu betrachten. viel davon gelernt –

4

Einige zufällige Antworten ...

Ich glaube nicht, dass MEF für Silverlight particuarly gut geeignet ist. Es ist hauptsächlich für Desktop-Apps gedacht und könnte für andere Zwecke angepasst werden, bei denen sich die Plug-Ins im lokalen Dateisystem relativ zur App befinden.

MVVM erfordert, dass Sie Rollen verstehen. Die "Ansicht" ist Ihr XAML und Code-Behind. Der Code-Behind sollte Ereignisse aus dem Benutzersteuerelement behandeln, aber sehr wenig mehr als das.

Das ViewModel enthält die Daten, an die das Benutzersteuerelement gebunden wird. Im Allgemeinen ist das ViewModel als DataContext an die View gebunden, so dass alles im Formular an die Eigenschaften im ViewModel gebunden werden kann. Das ViewModel muss INotifyPropertyChanged implementieren und für jede Eigenschaft, für die das Formeldabad verwendet wird, Ereignisse mit geänderten Eigenschaften auslösen.

Wahrscheinlich möchten Sie eine ObservableCollection mit einem EntitySet als Quelle erstellen. Dies wird INotifyCollectionChanged für Datenbindungszwecke behandeln. Wenn die Entitäten in EntitySet auch INotifyPropertyChanged verarbeiten, sind Sie bei der Datenbindung für Sammlungen in guter Verfassung.

Sie können eine Eigenschaft für eine einzelne Entität erstellen und eine Datenbank erstellen, vorausgesetzt, dass die Änderungsbenachrichtigung ebenfalls implementiert ist (sowohl für Entitätsmitglieder als auch für die Entitätseigenschaft).

RIA-Dienste werden den DomainContext bei jedem Build neu generieren, was ein wenig hilft, es synchron zu halten. Es ist jedoch beabsichtigt, eine Service-Schicht über einem ORM zu sein, so dass Ihr ORM oder andere Daten-Mapping weiterhin auf andere Weise verwaltet werden müssen.

Ich habe nicht die endgültige Version von RIA Services angeschaut, aber ich war nicht sehr beeindruckt von der Beta-Version. Ich würde lieber gute Entity-Klassen auf dem Server definieren und sie mit dem Silverlight-Projekt teilen. Es ist jedoch nicht einfach einzurichten und erfordert einige nicht-triviale WCF, die nicht auf Service-Referenzen angewiesen sind. (Die endgültige Version von RIA Services hat möglicherweise etwas davon bereinigt, aber der native WCF-Dienstverweis in Silverlight ist ziemlich bösartig, hauptsächlich weil er generierte Klassen nicht automatisch neu erstellt und den URI für den serverseitigen Dienst fest codiert .)

Metadaten waren ein weiteres Problem mit RIA Services Beta. Es ist einfacher, Metadatenattribute direkt an Ihre DataContract-Klasse und die einzelnen DataMember-Eigenschaften anzuhängen, wenn Sie die Entitätsquelle steuern. Dies kann wiederum bedeuten, dass RIA Services nicht verwendet werden. Das Schreiben einer separaten Metadatenklasse, wie sie für die RIA-Beta erforderlich war, war keine gute Lösung.

Ich endete nicht mit RIA-Services für Silverlight 3 und bereue es nicht. Hier ist ein excellent article on WCF and Silverlight. Obwohl es Silverlight 2 heißt, ist es immer noch Ziel für jede Silverlight-Version.

Ich empfehle MVVM Light. Quelle ist auf Codeplex verfügbar, wenn das ein Problem ist. Es bietet Messaging- und Befehlsunterstützung sowie einen ViewModelLocator; Während letzteres ein bisschen Arbeit erfordert, um es zu verstehen, ist es wirklich eine gute Erweiterung des grundlegenden MVVM-Modells.

hoffe, das hilft .....

+0

Es gibt auch eine schöne laufende Business-Apps Probe mit MVVM und WCF RIA. Schau es dir hier an: http://intersoftpt.wordpress.com/2010/06/29/clientui-part-5-the-supercharged-silverlight-navigation/ –

2

Ich dachte, ich Sie über ein Projekt wissen lassen würde an dem ich arbeite - gerade unsere erste Veröffentlichung getan. Bietet eine großartige einfache Möglichkeit, MVVM für Silverlight + RIA-Dienste speziell anzusprechen. Vereinfacht den Großteil der MVVM-Funktionen und bietet einige weitere Controller-ähnliche Funktionen für die Klasse Notifications. http://slmvvms.codeplex.com/

Verwandte Themen