Frage

Ich möchte mein Domänenmodell in eine WCF-Dienst-API übertragen und wollte mir ein paar Gedanken zu Lazy-Loading-Techniken bei dieser Art von Einrichtung machen.

Irgendwelche Vorschläge für diesen Ansatz?


Als ich diese Technik implementierte und in meine App einstieg, traf der Server kurz bevor er meine Liste zurückgab, auf den Abruf jeder Eigenschaft, die verzögert geladen werden sollte ...Also eifriges Laden.Könnten Sie dieses Problem erläutern oder eine Lösung vorschlagen?

Bearbeiten:Es erscheint Sie können das XMLIgnore-Attribut verwenden, damit es bei der Serialisierung nicht berücksichtigt wird.Ich lese das aber immer noch

War es hilfreich?

Lösung

Wie bei jeder Remoting-Architektur sollten Sie vermeiden, dass ein vollständiger Objektgraph unkontrolliert „unterwegs“ geladen wird (es sei denn, Sie haben eine trivial kleine Anzahl von Objekten).

Der Wikipedia-Artikel hat die Standardtechniken ziemlich zusammengefasst (und in C#.zu!).Ich habe sowohl Ghosts als auch Value Holders verwendet und sie funktionieren ziemlich gut.

Stellen Sie bei der Umsetzung dieser Art von Technik sicher, dass Sie die Belange strikt trennen.Auf dem Server sollten Ihre Servicevertrags-Implementierungsklassen die einzigen Teile des Codes sein, die mit Datenverträgen funktionieren.Auf dem Client sollte die Dienstzugriffsschicht der einzige Code sein, der mit den Proxys funktioniert.

Durch eine solche Schichtung können Sie die Art und Weise anpassen, wie der Dienst relativ unabhängig von den UI-Schichten, die den Dienst aufrufen, und der aufgerufenen Geschäftsebene angepasst wird.Es gibt Ihnen auch eine halbe Chance auf Unit-Tests!

Andere Tipps

Führen Sie kein verzögertes Laden über eine Serviceschnittstelle durch.Definieren Sie explizite DTOs und nutzen Sie diese als Ihre Datenverträge in WCF.

Sie können NHibernate (oder andere ORMs) verwenden, um die Objekte, die Sie zum Erstellen der DTOs benötigen, ordnungsgemäß abzurufen.

Sie könnten versuchen, etwas REST-basiertes zu verwenden (z. B. ADO.NET-Datendienste) und binden Sie es transparent in Ihren Client-Code ein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top