2009-07-22 13 views
14

Estoy buscando cualquier tipo de documentación, una aplicación open source nhibernate winform que pueda estudiar, o incluso mejor un framework winform/nhibernate. Vi un poco de esto en Nhibernate contrib y NhAddins pero eso es todo. Hay mucho sobre web pero muy pocos sobre winform. ¿Por qué es eso?Ejemplo de la aplicación nhibernate winform

Respuesta

1

Hay un trabajo en progreso discutiendo la mezcla de formularios nHibernate + Windows escritos por Sebasian Talamoni available here. Incluye discusión + código.

+0

Gracias por el enlace, ya probé esta aplicación de muestra hace un tiempo. La documentación incluida en el zip es interesante. Me gustaría encontrar algunos otros artículos como este. ¿Sabes si el autor ha publicado una secuela? –

+0

No sé de ninguna parte de mi cabeza. El artículo tiene información útil e interesante. Sin embargo, la búsqueda de Google arroja mucha otra información. –

+0

Me gustaría encontrar algo directamente utilizable, como las toneladas y toneladas de plataforma de blog que puede encontrar, pero para nHibernate. Y Winform :). –

7

La razón por la que hay tan pocos ejemplos para winforms, es imho, administrar sesiones es mucho más complejo en clientes inteligentes que en el mundo web.

En el mundo de la web, usted abre una ISession cuando se inicia una sesión http, y cierra la ISession cuando la sesión http está finalizando.

No existe una traducción directa del concepto de sesión http en un cliente inteligente; múltiples pantallas se abren al mismo tiempo, algunas se minimizan, otras pantallas se abren y se cierran todo el tiempo, otras se cierran sin guardar cambios ... se entiende la idea.

creo que hay tres estrategias básicas:

1 sesión por aplicación

Me quedaría lejos de esto. Recuerde, si su sesión singleton arroja una excepción, como una excepción de entidad obsoleta, esa sesión ahora no se puede usar. Tu aplicación está básicamente en el doo doo.

Sesión por pantalla

Esto es un poco mejor, evitar su aplicación bajando la sartén si una sola sesión explota. Sin embargo, algunas pantallas pueden agruparse juntas en el mismo unit of work. Necesitan compartir la misma sesión o tendrán issues tratando de compartir sus entidades entre pantallas ya que las entidades persistentes tienen afinidad con la sesión que las cargó.

conversaciones persistentes

Creo que este es el camino a seguir. Usted define un servicio que contiene el alcance de su unidad de trabajo. Cada vez que llama a métodos en este servicio, la ISession correcta se intercambia de manera invisible para usted. Cuando haya terminado con su servicio, llame a otro método y la sesión se descartará.

La instancia del servicio se puede compartir entre las pantallas, por lo que comparten la sesión. Se pueden abrir varias sesiones al mismo tiempo. Todo esto se hace a través de técnicas de Programación Orientada a Aspectos, no es necesario tomar ninguna otra acción que etiquetar sus servicios con atributos.

Esto suena bastante complicado así que revise las publicaciones de Fabio en él here, here y here.

Hay una implementación de este patrón en unoffical nh addins. Esto funciona en Windsor, probablemente podría convertirlo a otros contenedores IoC.

3

Fabio Maulo tiene un buen post con respecto a la gestión de sesiones en una aplicación WinForms, también hay una descarga de la aplicación de muestra vinculada en la parte inferior.

8

This artículo de Oren Eini es el mejor ejemplo de cómo implementar una aplicación de escritorio de escritorio que he visto. Los patrones de diseño y las mejores prácticas que detalla deberían aplicarse a las aplicaciones WinForms o WPF \ Silverlight.

Cuestiones relacionadas