3 Stimmen

Wie kann man die alte Geschäftslogik aus einer Silverlight-Anwendung nutzen?

Ich habe ein XBap-System, das als 3-Schicht-Anwendung konzipiert ist. Der XBap-Client konsumiert die Logik über einen WCF-Dienst mit netTcpBinding.

Um die Datenbindung zu vereinfachen und die in meine Geschäftsobjekte integrierte Datenvalidierung wieder verwenden zu können, habe ich mich dafür entschieden, die Geschäftsobjektbibliothek vom xBap-Client aus zu referenzieren, anstatt Proxies zu erzeugen.

Diese Objekte implementieren keine andere Logik als ihre eigene grundlegende Datenvalidierung. Die eigentliche Geschäftslogik ist in meinem WCF-Dienst implementiert.

Jetzt stehe ich vor einer großen Herausforderung. Ich muss die xBap zu Silverlight zu portieren, so dass ich meine Silverlight app. die gleiche Geschäftslogik (die auch von einer Winforms LOB-Anwendung verwendet wird) zu konsumieren müssen.

Einige Probleme, die auftreten:

1) Kann nicht auf die Business-Objekte-Bibliothek von der Silverlight-Client-Anwendung verweisen, weil es als eine reguläre DLL und nicht eine Silverlight kompiliert ist.

2) Ich kann es nicht als Silverlight-Bibliothek kompilieren, weil ich viele Funktionen verlieren würde und das ist offensichtlich sowieso keine gute Idee. Wenn in der Zukunft eine neue .net-Plattform entsteht, habe ich keine Garantien, dass die modifizierte (Silverlight) dll funktionieren wird.

Ich hatte etwas Hoffnung, als ich RIAServices entdeckte. Ich habe irgendwo gelesen, dass ich einen Dienst implementieren und jede Art von DAL verwenden kann. (Ich habe eine benutzerdefinierte), aber ich habe kein Beispiel gefunden, das zeigt, wie man RIAServices auf eine bestehende Geschäftsschicht setzt. Es ist erwähnenswert, dass wir LINQ nicht verwenden (und dies auch nicht planen). Jedes Beispiel, das ich gefunden habe, begann mit der Verwendung von RIAServices und dem Schreiben der Geschäftslogik von Grund auf mit LINQ.

RIAServices generiert datenbindungsfähigen Client-Code, aber ich habe das Gefühl, dass ich die gesamte Geschäftsschicht ändern müsste, und das wäre sehr teuer.

Die Lösung scheint also darin zu bestehen, weiterhin WCF zu verwenden, insbesondere jetzt, da Silverlight 3.0 eine neue Binärbindung unterstützt, und mit Proxies anstelle der eigentlichen Geschäftsobjekte zu arbeiten. Das Problem ist, dass diese Proxies keine Datenvalidierung, keine Benachrichtigung über Eigenschaftsänderungen und keine Änderungsverfolgung beinhalten, drei Aspekte, die meine Business Clasess ausführen.

RIAServices löst diese und andere Aspekte, aber es erfordert die Arbeit mit Silverlight-Projekten. WCF (SVCUtil.exe) generiert Proxys, aber sie sind nicht "vollständig" für unsere Bedürfnisse. Es scheint also, dass ich mein eigenes Dienstprogramm entwickeln muss, um diese Proxys zu generieren, wobei ein Geschäftsobjekt als Eingabe verwendet wird.

Bevor ich damit beginne, möchte ich wissen, ob jemand bereits mit diesem Problem konfrontiert war und es auf eine überzeugende und schmerzlose Weise lösen konnte.

Vielen Dank im Voraus,

Gonzalo

1voto

Nikhil Kothari Punkte 5193

Lesen Sie diesen Blogbeitrag und das Beispiel - Business Apps Beispiel für Silverlight 3 RTM und .NET RIA Services Juli Update: Teil 8: WCF-basierte Datenquelle .

Es zeigt, wie ein DomainService mit .NET RIA Services geschrieben wird, der Operationen und ein Modell für den Silverlight-Client bereitstellt, und der wiederum mit einem WCF-Service arbeitet.

Sie sollten Ihre Geschäftslogik nicht ändern müssen. Der DomainService als Schicht würde das wiederverwenden, und es würde Sinn machen, wenn Sie Ihre Geschäftslogik/WCF-Dienste nicht als solche für Silverlight-Clients offenlegen können ...

Ich hoffe, das hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X