[Haftungsausschluss: Ich bin ASP.NET MVC Developer]
Hallo,
Ich suche nach Best Practices für die Implementierung von MVVM-Pattern mit WCF RIA in Silverlight 4.
Ich möchte MEF von IoC nicht verwenden, um meine ViewModels zu finden. Was ich gerne wissen würde ist, wie man MVVM-Muster mit Silverlight 4 und WCF RIA anwendet.
Ich möchte keine anderen Dinge 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 klar. Wenn ich das verstehe, sollte der MVVM die gesamte Logik enthalten, um ihn isoliert testen zu können, aber wenn es darum geht, ihn mit WCF RIA zu kombinieren, ist das eine andere Geschichte. Ich habe folgende Fragen.
Kann ich generierte Metadaten als Modell verwenden? Es wäre einfacher, es zu benutzen, wenn ich alles von Grund auf schreibe.
Da ich den einzigen Weg sah, konnte ich Daten durch DomainContext oder durch direkte Bindung in der Ansicht erhalten (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?
Wie passe ich das Modell an die Datenbank an?
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 den WCF RIA fallen lassen und es mit WCF von Grund auf neu machen?
Was denkst du?
Sie könnten an dieser Sitzung interessiert sein. Es wird erläutert, wie das MVVM-Muster mit RIA WCF Services verwendet wird.
Einige zufällige Antworten ...
Ich denke nicht, dass MEF besonders gut für Silverlight 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 Form-Databind 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 Services wird den DomainContext bei jedem Build neu generieren, was ein wenig dazu beiträgt, sie 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 mir die endgültige Version von RIA Services noch nicht angesehen, aber die Beta-Version hat mich nicht sonderlich beeindruckt. 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 habe die RIA-Services für Silverlight 3 nicht genutzt und habe es nicht bereuen müssen. Hier ist ein ausgezeichneter Artikel über WCF und 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 wenig Arbeit braucht, um es zu verstehen, ist es wirklich eine gute Erweiterung des grundlegenden MVVM-Modells.
Hoffe das hilft .....
Ich dachte nur, ich würde Sie über ein Projekt informieren, an dem ich gerade arbeite - wir haben unsere erste Veröffentlichung gemacht. 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. Ссылка
Tags und Links silverlight silverlight-4.0 mvvm wcf-ria-services