Hola a todos,

Estoy utilizando NHibernate en un proyecto con ThreadStaticSessionContext.
Utilizo Model-View-Presenter en la capa de presentación (WinForms) y tengo 
una capa de servicios de aplicación.
Así, cada presentador tiene una y sólo una vista y uno o, cuando no sea 
necesario, ningún servicio asociados.
En los casos en los que se trate de vista principal, al iniciarse su 
servicio asociado, éste abrirá una nueva sesión y la asignará al contexto,
haciéndola disponible a repositorios, etc. Y al salir de la vista, se 
cerrará la sesión y se realizará el unbind.
Si en cambio se trata de una vista secundaria, su servicio (que como digo 
podría incluso no existir si no se necesitase), no abrirá ninguna sesión,
manteniéndose así la del contexto establecida por su vista padre.

Bajo este escenario se me presentan varias dudas. A ver si sé explicarme y 
alguien puede echarme un cable...
1/ ¿Estoy obligado a hacer modales (ShowDialog) todas las vistas padre 
(principales)?
   Lo digo porque si no lo hago y el usuario abre p. ej. dos 
mantenimientos, el servicio de la segunda vista machacaría la
   sesión establecida por el primero.
   ¿Esto es así o hay algo en esto del SessionContext que no estoy 
entendiendo?
   
2/ Si en un formulario "hijo", e. d., dependiente de uno principal, el 
usuario realiza cambios pero finalmente decide descartarlos y
   sale cancelando, como mi capa de presentación modifica directamente los 
objetos de negocio (no uso DTOs), ¿qué debería hacer?
   ¿Es éste uno de esos casos justificados de Evict o hay mejores opciones 
de diseño?
   
3/ Si en un formulario "hijo" se produce una excepción de NH, como la 
sesión deja de ser válida y hay que abrir una nueva,
   ¿cómo haríais este control de errores de una forma un poco elegante y 
pensando un poco en el usuario?
   La opción de cerrar ambos formularios y que el usuario pierda todo los 
cambios que haya podido hacer la veo un poco bestia, pero
   tampoco se me ocurren muchas más alternativas...

   
Muchísimas gracias de antemano a todos,
JC

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a