2008-09-18 11 views

Respuesta

3

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.

2

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.

0

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

Cuestiones relacionadas