2009-07-22 4 views
14

Ich bin auf der Suche nach jeder Art von Dokumentation, eine Open-Source-Nhibernate Winform-Anwendung, die ich studieren kann, oder noch besser ein Winform/Nhibernate-Framework. Ich habe ein wenig davon in Nhibernate contrib und NhAddins gesehen, aber das ist alles. Es gibt viel über das Web, aber nur sehr wenige über Winform. Warum ist das?Beispiel von Nhibernate winform Anwendung

Antwort

1

Es gibt eine Arbeit im Gange, die das Mischen von nHibernate + Windows Formen, die von Sebasian Talamoni available here geschrieben wurden, diskutiert. Es enthält Diskussion + Code.

+0

Danke für den Link, ich habe diese Beispiel App bereits vor einiger Zeit ausprobiert. Die im Zip enthaltene Dokumentation ist interessant. Ich würde gerne andere Artikel wie diesen finden. Wissen Sie, ob der Autor eine Fortsetzung veröffentlicht hat? –

+0

Ich weiß nichts von meinem Kopf. Der Artikel hat nützliche, interessante Informationen. Die Google-Suche gibt jedoch viele andere Informationen zurück. –

+0

Ich möchte etwas direkt verwendbar finden, wie die Tonnen und Tonnen von Blog-Plattform können Sie aber für nHibernate finden. Und Winform :). –

7

Der Grund, warum es so wenige Beispiele für WinForms sind, ist imho, Sitzungen Verwaltung viel komplexer ist in Smart Clients als in der Web-Welt.

In der Web-Welt öffnen Sie eine ISession, wenn eine http-Sitzung startet, und Sie schließen die ISession, wenn die http-Sitzung beendet ist.

Es gibt keine direkte Übersetzung des Konzepts der http-Sitzung in einem Smart Client; mehrere Bildschirme alle gleichzeitig geöffnet, einige minimiert, andere Bildschirme öffnen und schließen die ganze Zeit, einige werden geschlossen, ohne Änderungen zu speichern ... Sie bekommen die Idee.

Ich denke, es gibt drei grundlegende Strategien:

1 Sitzung pro Anwendung

ich weg von diesem bleiben würde. Denken Sie daran, dass diese Sitzung jetzt unbrauchbar ist, wenn eine Ausnahme wie eine veraltete Entitätsausnahme von Ihrer Singleton-Sitzung ausgelöst wird. Ihre App ist grundsätzlich in der Doo Doo.

Session pro Bildschirm

Das ist ein bisschen besser, vermeiden Sie Ihre App die Pfanne gehen nach unten, wenn eine einzelne Sitzung sprengt. Einige Bildschirme können jedoch auch zusammen in der gleichen unit of work kollabieren. Sie müssen die gleiche Sitzung teilen, oder Sie haben issues versucht, Ihre Entitäten zwischen Bildschirmen zu teilen, da persistente Entitäten Affinität mit der Sitzung haben, die sie geladen hat.

Persistent Gespräche

Ich denke, das ist der Weg zu gehen. Sie definieren einen Service, der den Umfang Ihrer Arbeitseinheit enthält. Jedes Mal, wenn Sie Methoden für diesen Dienst aufrufen, wird die richtige ISession für Sie unsichtbar eingetauscht. Wenn Sie mit Ihrem Service fertig sind, rufen Sie eine andere Methode auf und die Sitzung wird verworfen.

Die Instanz des Dienstes kann zwischen Ihren Bildschirmen geteilt werden, sodass sie die Sitzung freigeben. Mehrere Sitzungen können gleichzeitig geöffnet sein. All dies geschieht über Aspect Oriented Programming-Techniken, Sie müssen nichts anderes tun, als Ihre Services mit Attributen zu versehen.

Das hört sich ziemlich kompliziert an, also checken Fabios Posts darauf here, here und here.

Es gibt eine Implementierung dieses Musters in unoffical nh addins. Dies funktioniert in Windsor, könnte wahrscheinlich in andere IoC-Container umgewandelt werden.

3

Fabio Maulo hat eine nette post in Bezug auf Sitzungsverwaltung in einer WinForms App, es gibt auch einen Beispiel-Download der Anwendung am unteren Rand verbunden.

8

This Artikel von Oren Eini ist das beste Beispiel für die Implementierung einer Desktop-Anwendung Windows-Anwendung, die ich gesehen habe. Die detaillierten Entwurfsmuster und Best Practices sollten für WinForms- oder WPF \ Silverlight-Anwendungen gelten.

Verwandte Themen