Frage

Ich finde es viel schwieriger, ihre Sitzung in einer Desktop-Anwendung zu verwalten, weil Sie nicht die Vorteile einer solchen klaren bondary wie Httpcontext nehmen. So, wie Sie verwalten Sie Ihre Sitzung Lebensdauer Vorteil verzögertes Laden zu nehmen, aber ohne eine Sitzung offen für die gesamte Anwendung?

War es hilfreich?

Lösung

Ich glaube, es um die Gestaltung Ihrer Objekte läuft darauf hinaus. Da faul-Laden in der pro-Objekt-Ebene durchgesetzt werden, können Sie die Vorteile dieser Tatsache nehmen, wenn Sie über die Sitzungsverwaltung denken.

Zum Beispiel habe ich eine Reihe von Objekten, die datenintensive und faul geladen sind, und ich habe eine Raster / Zusammenfassung Ansicht und eine Detailansicht für sie. In der Raster-Übersichtsansicht, verwende ich nicht die faule belastete Version des Objekts. Ich benutze ein Surrogat-Objekt, das Daten zu präsentieren, und das Surrogat-Objekt ist nicht faul geladen.

Auf der anderen Seite, wenn ein Benutzer auswählt, dass Datensatz zum Betrachten / Bearbeiten und geben Sie ein mehrseitige Details des Objektes zu sehen, das ist, wenn wir faul-Laden auf das spezifische Objekt anwenden. Die Daten werden nun faul geladen je nachdem, welche Details auf Nachfrage nur betrachtet werden. Auf diese Weise, der Umfang meiner Sitzung offen nur für verzögertes Laden zu sein dauert so lange, wie die Detailansicht verwendet wird.

Andere Tipps

Ayende hat vor kurzem rel="noreferrer"> .

Wie Sie gesagt, Sie können nicht die Grenze des Httprequest verwenden, aber Sie wissen, was ist ein „Httprequest“ in Ihrem Desktop-Anwendung.

Lassen Sie mich erklären. Normalerweise wird Ihr Httprequest wird ein Controller für eine Aktion sein, und Sie werden Ihre Sitzung auf diese spezielle Aktion zu begrenzen. Jetzt in Ihrer Desktop-Anwendung der „Controller“ (Ereignisse) kann kleiner sein, aber wie @ Jon sagte, kann ein Fenster leicht eine Grenze dar. Sie arbeiten mit den Dingen dort, lassen Sie sie auf Ihrer Sitzung sein

Vielleicht können wir ein Befehlsmuster denken einrichten. Jede significative Veranstaltung wird füttern und einen Befehl auslösen, und es ausführen. Die Basis AbstractCommand.Execute () Implementierung ist für die Sitzung zu initialisieren, das Einwickeln der Transaktion, die konkret SomeCommand._Execute () Implementierung aufrufe und die ganze Zeug zu schließen.

Wie auch immer, dies ist weit davon entfernt, Ausdauer Agnostiker, wie es sein soll, wenn ich mein Objekt geladen haben und ich (will) befassen sich nur mit einfachen Fällen (Ich beziehe mich expecially zu faul Last hier).

Ist es sonst möglich, irgendeine Art von Auto-open / auto-close Verhalten zu implementieren? Dies sollte, indem sie Persistenz-Schicht empfindlich auf die Bedürfnisse für Abfragen, die von höheren Schichten, auch in den impliziten Fällen wie faul Last Trigger erreicht werden. Wie für die Verbindung geschlossen wird, kann die Persistenz-Schicht nach einer vorgegebenen Timeout (10 Sekunden?) In der Nähe von DB Inaktivität. Ich weiß, das ist nicht scharf. Aber es wäre wirklich höhere Schichten macht Persistenz Agnostiker.

Danke, Marcello

scroll top