2010-12-16 12 views
0

Ich baue eine Silverlight-Anwendung mit MVVM Muster, aber ich verstehe nicht, was ich hier fehlt ...Fest mit MVVM Architektur Problem

  1. ViewsProject (Silverlight-Anwendung) enthält Bedienelemente und Seite. Referenzen ViewModelsProject.
  2. ViewModelsProject (Silverlight-Klassenbibliothek) enthält Backend-Code der Ansichten. Auch die Geschäftslogik wird hier bleiben. Es wird auf das Modellprojekt verwiesen.

  3. ModelsProject (Windows-Klassenbibliothek) enthält: Ado.net-Entitätsmodell einer lokalen Datenbank und einen WCF RIA-DomainService, der auf dem Entitätsmodell basiert. Der Zweck besteht darin, Daten aus der lokalen Datenbank abzurufen, und die Entitäten werden über den Domänenservice verfügbar gemacht.

  4. Webprojekt: Enthält xap von ViewsProject.

Habe ich schon alles richtig gemacht? Wenn ja, dann helfen Sie mir zu verstehen:

Wie rufe ich die Methoden des Domain Service im ViewsModel Projekt? Wenn ich das ModelsProject referenziere, bekomme ich den Fehler, dass nur Silverlight-Projekte hinzugefügt werden können. Wenn ich ModelsProject zu einem silverlight Klassenbibliotheksprojekt dann ändern, kann ich das Entitätsmodell meiner Datenbank nicht hinzufügen.

+1

MVVM nicht diktieren, dass Sie Ihre Modelle Viewmodel und Ansichten in separaten Projekten trennen müssen. Diese können vielleicht alle in ein und demselben Projekt in verschiedenen Ordnern leben und trotzdem ein MVVM-Design erreichen. –

+0

die Lösung erwartet, mit der Zeit erheblich zu erweitern, um zukünftige Probleme zu sparen, entschied ich mich, die Lösung in Baugruppen anstelle von Ordnern zu brechen – InfoLearner

+1

Machen Sie es zunächst einfach, und erhalten Sie die Anwendung zu arbeiten. Dann können Sie über die Verteilung zwischen mehreren Projekten/Baugruppen nachdenken. Ich stimme Aaron zu. – Jehof

Antwort

0

arbeitete ich die Antwort aus.

Ändern Sie ViewModelsProject (Silverlight-Klassenbibliothek) in Silverlight Application type. Aktivieren Sie Ria-Dienste während der Erstellung des Projekts aktivieren.

Fügen Sie in der View-Modellklasse mithilfe von ModelsProject hinzu. Kompilieren Sie das ViewModelsProject.

Alle Methoden des WCF Ria-Dienstes werden dann im Code angezeigt.

0

Es ist nicht viel Sinn, Ihre Ansichten von Ihren Viewmodels IMHO zu trennen. Ich habe diesen Ansatz schon vorher gesehen, aber das View-Modell (meiner Meinung nach zumindest) repräsentiert eine "view-passender" Abstraktion der Daten, als das Domain-Modell bieten kann. Das ViewModel bietet eine Indirektionsebene, in der sich die Präsentation ändern kann, ohne dass das Modell dasselbe tut, aber es ist kaum mehr als eine Art Adapter/Controller-Hybrid und lebt neben der Ansicht. obwohl

Um Ihre Frage zu beantworten ...

Normalerweise werden Sie haben Ihr SL Projekt Domaindienst rufen (einen Web-Service in der Regel) über auf das Viewmodel aus Ihrer Sicht befiehlt. Der Befehl viewmodel führt dann direkt oder indirekt den Web-Service-Aufruf aus. Dieser Webservice benötigt nicht muss eine SL-Klassenbibliothek sein, da es auf dem Webserver von Ihrem Client entfernt ist.

Ich habe das Gefühl, Ihre Gedanken in Bezug auf eine Desktop-App hier. Denken Sie daran, dass das SL-Projekt auf der Clientseite ausgeführt wird und Ihre Daten nicht vorhanden sind. Um all das zu erreichen, benötigen Sie einen Remote-Service, um die Daten zu erhalten. Eine reguläre Bibliotheksreferenz ist nicht gut, da sich die Daten nicht auf dem Client befinden.

HTH, Stimul8d

+0

ich glaube nicht, dass du meine Frage verstanden hast. Meine Frage ist einfach: Wie kann ich den WCF Ria-Service von meiner Silverlight-Anwendung aus nutzen? – InfoLearner

+0

Vielleicht ändern Sie den Titel der Frage dann cus, das ist nicht klar. Daniels Antwort ist wahrscheinlich dann genug. – Stimul8d

1

Damit Clientprojekte WCF RIA Service verwenden können, müssen Sie den WCF RIA Services Link in der Projekteigenschaft festlegen.

Für die Modularität und Trennung in der Projektarchitektur bei Verwendung von WCF RIA Services, können Sie WCF RIA-Klassenbibliotheken verwenden.

alt text