2016-04-06 13 views
2

Ich habe eine App in zwei Ebenen (Präsentation und Geschäftslogik im Client (WPF mit MVVM) und Daten in einem SQL-Server), aber ich habe das Problem, dass es zu viel verwendet RAM im Client aufgrund der Notwendigkeit einer großen Sammlung von Objekten zu manipulieren.Dreistufige Architektur mit WCF

Also überlegte ich, in eine dreistufige Architektur zu wechseln, einen Service in einem Server hinzuzufügen, um die gesamte Geschäftslogik zu verarbeiten, und den Clients nur das zu liefern, was sie mit WCF anzeigen müssen, um die Anforderungen im Speicher zu senken.

Meine Frage ist, wie man das richtig macht. Die Kommunikation zwischen diesem Server und den Daten (im SQL-Server) ist ziemlich einfach, aber was soll ich vom Server zum Client senden?

Zum Beispiel, sollte ich nach einem MVVM-Ansatz die Modelle, die Viewmodels oder was (vom Server zum Client) senden? Wenn die Eigenschaften des Viewmodels auf das Modell verweisen und ich nur eine Liste von ViewModels sende, würde der Client dann in der Lage sein, die Informationen zu lesen?

Können Sie mir einige Beispiele aus der realen Welt liefern?

+2

einen Dienst/Domain Schicht hinzufügen? https://programmers.stackexchange.com/questions/159283/mvvm-ddd-and-wpf-layered-application-project-structure-guidance –

Antwort

1

Betrachten sie eine Dienstschicht in Verbindung mit Geschäft Hinzufügen von Objekten Daten vom Server an den Client zu tragen.

Von Microsofts Microsoft Application Architecture Guide:

benutzerdefinierte Geschäftsobjekte. Dies sind Common Language Runtime (CLR) Objekte, die Entitäten in Ihrem System beschreiben. Ein Object/Relational Mapping (O/RM) Technologie wie das ADO.NET Entity Framework (EF) oder NHibernate verwendet werden, können diese Objekte

Ihre Frage zu schaffen ", soll ich senden(vom Server zum Client)die Modelle, die Viewmodels, oder was "vermischt die Verantwortung des UI-Pattern (MVVM) mit dem Senden von Daten vom Server an den Client.

Durch Hinzufügen eines Service-Layers können Sie die Speicherprobleme vermeiden und die Last des Umhertragens von Objekten vermeiden. Erwägen Sie die Verwendung eines objektbezogenen Mappers für diese Objekte, wie z. B. das Entity Framework von Microsoft, oder, um die Leistung zu verbessern, ein leichtes ORM wie StackOverflow's own Dapper.net. Schließlich mit careful utilization of delayed query execution mit IEnumerable sollten Sie in der Lage sein, Ihre Leistungsprobleme zu lösen.

Eine High-Level-Diskussion ist in diesem Stadium hilfreich, da es viele Richtungen gibt, die Sie dieses Design nehmen können. Weitere Informationen zum Entwurf eines solchen Systems finden Sie im Microsoft Application Architecture Guide, Chapter 5: Layered Application Guidelines. Während das Bild unten mehr Schichten beschreibt, als Sie benötigen, ist es eine hilfreiche Referenz. Die Service-Schicht kann die Business-Objekte verwalten, die dem Kunden präsentiert werden:

enter image description here