2010-12-03 9 views
0

Ich versuche MVVM in Silverlight zu verstehen - meistens im Kontext, wie ich es in eine bestehende Architektur einbauen kann - oder eher, wie ich ein existierendes zusammenführen kann Architektur dazu.Silverlight, WCF, MVVM und vorhandene n-Tier-Assemblies

Die Architektur, die ich im Moment habe, ist im Grunde deine traditionelle n-Schicht mit einer Service-Schicht darüber. Ich habe eine Serviceschicht in WCF, eine Assembly für Geschäftslogik und eine Assembly, die Geschäftsentitäten (Entitätsframework) enthält.

Die Service-Schicht in WCF ist ziemlich einfach, sie macht nur die Business-Logik-Ebene verfügbar und benötigt einige Änderungen, um sie mit Silverlight kompatibler zu machen. Die Geschäftsentitäten-Assembly wird sowohl von der Service-Schicht als auch von der Logik-Schicht referenziert, so dass sie beide die gleichen Entitäten verwenden und alles, was den Service verbraucht, kennt diese Entitäten ebenfalls.

Alles ist peachy.

Entlang kommt Silverlight und MVVM. Der View-Teil ist einfach, das ist alles UI-Zeug. Das ViewModel und Model ist, wo es für mich interessant wird. In meinen Augen ist das Model meine Business-Entity-Assembly und das ViewModel ist meine Business-Logik-Assembly.

Wenn Silverlight meine WCF-Dienst verbraucht, dann ist dies und die gekoppelte Business-Logik-Ebene definitiv mein ViewModel. Jetzt habe ich 2 Probleme; 1/Das ViewModel-Objekt muss in meinem Silverlight-Projekt vorhanden sein. 2/Die vom WCF-Dienst bereitgestellten Typen (Geschäftsentitäten) sind nicht mit Silverlight kompatibel, da die Assemblies nicht für Silverlight sind. Cue-Ausnahme für diesen Effekt, wenn ich versuche, die Assembly als Referenz hinzuzufügen.

Also ... wie verwende ich meine Geschäftseinheiten als mein Modell? Außerdem - wie verwende ich andere .Net-Typen wie System.ServiceProcess.ServiceController in meinem ViewModel?

Antwort

0

Ich denke, Sie sollten sich WCF RIA Services ansehen.

https://www.silverlight.net/getstarted/riaservices/

+0

Ist RIA auch für andere Anwendungen geeignet? Sicher, es kann dieses Problem lösen. Andere Anwendungen müssen jedoch auf die Geschäftslogikebene zugreifen. Der WCF-Dienst muss beispielsweise extern für Clients verfügbar sein. – Carl

+0

Auch - wie hilft mir dies zu entlarven. Net-Objekte wie System.ServiceProcess.ServiceController? Muss ich das wirklich neu modellieren? – Carl

+0

RIA ist ein WCF-Dienst und kann nach meinem Verständnis von anderen Anwendungen aufgerufen werden. – thepaulpage