Me resulta mucho más difícil administrar su sesión en una aplicación de escritorio, porque no puede aprovechar una bonificación tan clara como HttpContext. Entonces, ¿cómo gestiona la duración de su sesión para aprovechar la carga lenta pero sin tener una sesión abierta para toda la aplicación?¿Cuál es su estrategia de gestión de sesiones para NHibernate en aplicaciones de escritorio?
Respuesta
Creo que se reduce al diseño de sus objetos. Debido a que la carga diferida puede imponerse en el nivel por objeto, puede aprovechar ese hecho cuando piensa en la administración de la sesión.
Por ejemplo, tengo un grupo de objetos que son cargados de datos y de carga lenta, y tengo una vista de cuadrícula/resumen, y una vista de detalles para ellos. En la vista de resumen de cuadrícula, no uso la versión de carga lenta del objeto. Utilizo un objeto sustituto para presentar esos datos, y ese objeto sustituto no tiene una carga lenta.
Por otro lado, una vez que un usuario selecciona ese registro para ver/editar e ingresa una vista de detalles de varias páginas del objeto, es cuando aplicamos la carga diferida al objeto específico. Los datos ahora se cargan de forma diferida dependiendo de qué detalles se visualizan solo a pedido. De esta manera, el alcance de mi sesión abierta para carga lenta solo dura mientras se usa la vista de detalles.
Como dijiste antes, no puedes usar el límite de HttpRequest, pero puedes entender qué es "HttpRequest" en tu aplicación de escritorio.
Déjame explicarte. Por lo general, su HttpRequest será un controlador para una acción y limitará su sesión a esa acción específica. Ahora, en su aplicación de escritorio, los "controladores" (eventos) pueden ser más pequeños, pero como dice @Jon, una ventana puede representar fácilmente un límite: usted trabaja con las cosas allí, déjelos estar en su sesión.
Tal vez podamos pensar en un patrón de comando configurado. Cada evento significativo alimentará y activará un Comando, y lo Ejecutará. La implementación básica de AbstractCommand.Execute() se encarga de inicializar la sesión, ajustar la transacción, llamar a la implementación concreta de SomeCommand._Execute() y cerrar todas las cosas.
De todos modos, esto está lejos de ser un agnóstico de persistencia, como debería ser cuando he cargado mi objeto y quiero (simplemente) tratar con instancias simples (me refiero especialmente a lazy-load aquí).
¿De lo contrario es posible implementar algún tipo de comportamiento de apertura automática/cierre automático? Esto se debe lograr haciendo que la capa de persistencia sea más sensible a las necesidades de consultas de capas superiores, incluso en casos implícitos, como desencadenantes de carga lenta. En cuanto al cierre de la conexión, la capa de persistencia podría cerrarse después de un tiempo de espera dado (10 segundos?) De inactividad de DB. Lo sé, esto no es nítido. Pero realmente haría que las capas más altas persistan en agnóstico.
Gracias, Marcello
Ayende ha escrito recientemente a great article on the subject in MSDN.
- 1. Estrategia de gestión de sesiones de Nhibernate para aplicaciones web con trabajadores en segundo plano?
- 2. ¿Gestión de sesiones de NHibernate?
- 3. NHibernate gestión de sesiones en aplicaciones de servicio de Windows
- 4. NHibernate gestión de sesiones en ASP.NET MVC
- 5. NHibernate.Burrow Para Gestión de Sesiones En NH3
- 6. Consejo de administración de sesiones de NHibernate
- 7. Localización para aplicaciones de iPhone: ¿cuál es su enfoque?
- 8. ¿Cuál es su enfoque para probar aplicaciones de iPhone/iPad?
- 9. ¿OAuth para aplicaciones de escritorio?
- 10. Gestión de sesiones/cookies en Apache JMeter
- 11. Gestión de sesión NHibernate en la aplicación WCF
- 12. ¿Qué es la gestión de sesiones en Java?
- 13. Biblioteca básica de autenticación y gestión de sesiones para PHP
- 14. Gestión de sesiones con Java Hibernate
- 15. Gestión de sesiones en Rails (2.3)
- 16. Gestión de sesiones con autenticación de Windows
- 17. Gestión de sesiones de Squeryl con 'using'
- 18. Es SQL Azure adecuado para aplicaciones de cliente de escritorio
- 19. Contenedores de escritorio para aplicaciones HTML5/JS
- 20. C# Aplicaciones de escritorio?
- 21. "Actualizaciones automáticas" para aplicaciones Java (de escritorio)?
- 22. Gui de Ruby para aplicaciones de escritorio
- 23. Aplicaciones de escritorio PHP
- 24. JavaScript aplicaciones de escritorio?
- 25. NHibernate sesión y gestión de transacciones en HttpModule
- 26. Php mysql para aplicaciones de escritorio
- 27. Gestión de sesiones de Spring + Hibernate en varios subprocesos
- 28. ¿Cuál es su manera de hacer aplicaciones GAE usando Clojure?
- 29. ¿Qt Quick es suficientemente maduro para grandes aplicaciones de escritorio?
- 30. Sesiones contextuales de NHibernate en ASP.NET MVC