José Hay un ejemplo dentro de unhaddins, que hace uso de CPBT, aqui la session es manejada a nivel del model (carpeta BusinessLogic del ejemplo), este sería un caso similar al que te refieres en -- y la sessión de nhibernate la manejo mediante el patrón CpBT a veces en app services --
Muchas gracias por los comentarios Saludos Edgar El 26 de noviembre de 2010 07:14, José F. Romaniello <[email protected] > escribió: > En winforms yo utilizo el patrón MVP Supervising Controller el cual lo > explico aca: > > http://jfromaniello.blogspot.com/2010/11/mvp-patron-supervising-controller-para.html > <http://jfromaniello.blogspot.com/2010/11/mvp-patron-supervising-controller-para.html>y > la sessión de nhibernate la manejo mediante el patrón CpBT a veces en app > services, y a veces directamente sobre el presenter, siempre con AOP. > > Para hacerlo a nivel de presenter necesité hacer AOP en metodos privados, > por lo cual use postsharp y publique el código en unhaddins.Postsharp > Un ejemplo simple que twittie hace un tiempo es este: > https://gist.github.com/341790 > > <https://gist.github.com/341790>Lo que dijo nelo de : > -no compartir objetos entre sesión > -no compartir sesión entre casos de uso > > Estoy 100% de acuerdo. Para la comunicación de datos entre diferentes casos > de uso, utilizo event aggregator: > http://jfromaniello.blogspot.com/2010/04/event-aggregator-example.html > <http://jfromaniello.blogspot.com/2010/04/event-aggregator-example.html> > http://jfromaniello.blogspot.com/2010/04/event-aggregator-with-reactive.html > <http://jfromaniello.blogspot.com/2010/04/event-aggregator-with-reactive.html> > http://jfromaniello.blogspot.com/2010/07/event-aggregator-subscriptors.html > > > <http://jfromaniello.blogspot.com/2010/07/event-aggregator-subscriptors.html>Aunque > ahora también he empezado a utilizar en silverlight otro patrón que se llama > Subject/Conductor, con una idea muy similar: > > http://www.jeremydmiller.com/ppatterns/Default.aspx?Page=ScreenActivationLifecycle&AspxAutoDetectCookieSupport=1 > > > <http://www.jeremydmiller.com/ppatterns/Default.aspx?Page=ScreenActivationLifecycle&AspxAutoDetectCookieSupport=1>A > lo que voy es que uso datos simples, nunca enviaría un entidad de negocio > desde un caso de uso a otro. > > El 26 de noviembre de 2010 02:27, Nelo Pauselli > <[email protected]>escribió: > > algunos puntos que yo tengo en cuenta en estos casos son: >> >> 1) Los objetos (y sus propiedad) que son leidos y guardados en una >> session solo son visibles dentro de la session antes de hacer el >> flush. mmm a ver si me explico mejor en código: >> >> session0.Save(new Persona {Nombre = "Original" }); >> >> var p1 = session1.Get<Persona>(id); >> p1.Nombre = "Otro"; >> >> var p2 = session2.Get<Persona>(id); >> Assert.AreEqual("Original", p2.Nombre); >> >> var p1bis = session1.Get<Persona>(id); >> Assert.AreEqual("Otro", p1bis.Nombre); >> >> session1.Flush(); >> >> var p3 = session3.Get<Persona>(id); >> Assert.AreEqual("Otro", p3.Nombre); >> >> es decir que, antes de hacer el Flush() los cambios solo son visibles >> utilizando la misma session, luego del Flush están disponibles para >> todas las sessions. >> Pienso que esto debería ayudarte a saber si tenés que usar la misma >> session o no en dos forms, para mi la conclusión es que una misma >> session no se debería usar en 2 casos de uso (unit of work, etc) >> diferentes o dos instancias del mismo caso de uso. >> >> 2) Luego, y en especial para winforms, la pregunta sería si vas a >> trabajar con objetos del negocio bindeados a los controles o vas a >> manejar un esquema de ApplicationServices y DTOs para la UI. >> >> - Si vas por la opción de los DTOs pienso que alcanzaría con manejar >> una session per call a nivel de ApplicationServices, >> - Si vas por la opción del binding (aspecto muy interesante en >> winforms) se me ocurren dos opciones ahora, al principio de cada >> método del form seteas la CurrentSession (sessions manejadas por >> hilos) y antes de salir del método seteas como current la anterior o >> hacés esto mismo con AOP a nivel de tu "controller", claro que con >> esto no podrías poner lógica de negocio en los forms, pero hasta >> quizás sea bueno. ;) >> >> saludos. >> nelo >> >> >> 2010/11/25 Nestor Rodriguez <[email protected]>: >> > Este es un buen articulo, te lo recomiendo : >> > http://msdn.microsoft.com/en-us/magazine/ee819139.aspx >> > Saludos, >> > Nestor Rodriguez >> > >> > 2010/11/25 tolemaC <[email protected]> >> >> >> >> Pues el problema viene al decidir una estrategia de manejo de sesión >> >> en WinForm, si usar una sesión por ventana o hacerlo por cada proceso >> >> de negocio, realmente el problema viene cuando un proceso de negocio >> >> llama a otro, no es facil saber si hay una sesión activa, si hay que >> >> abrir otra o coger la actual. También me gustaría liberar al negocio >> >> del uso de la sesión, ... en fin ese tipo de cosas. >> >> >> >> On 24 nov, 20:42, José F. Romaniello <[email protected]> wrote: >> >> > El 24 de noviembre de 2010 16:02, tolemaC <[email protected]> >> escribió: >> >> > >> >> > > ¿Conversation-per-Business-Transaction es la respuesta al problema >> con >> >> > > las sesiones? >> >> > >> >> > Para contestarte esto necesitamos que nos digas cual es tu problema >> con >> >> > el >> >> > manejo de sesiones. >> >> >> >> -- >> >> Para escribir al Grupo, hágalo a esta dirección: >> >> [email protected] >> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >> > >> > -- >> > Para escribir al Grupo, hágalo a esta dirección: >> > [email protected] >> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano >> >> -- >> Para escribir al Grupo, hágalo a esta dirección: >> [email protected] >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >> > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
