Antes de conoceros pensaba que mi nivel en .NET era alto, ... Ahora me siento como que no tengo ni idea.
Veo los ejemplos de NHibernate, de uNhAddins, y otros y no me entero de casi nada, por otro lado me pierdo con tanto nombre de patrón que no conozco, para poder entender un texto tengo que dedicarle toda mi atención y concentración a parte de tener 4 o 5 ventanas del navegador abiertas, una para lo que estoy leyendo y las otras para buscar que significan varias cosas de las que estoy leyendo :/, eso sin contar el traductor, pues hay cosas en inglés que se me escapan. Bueno, esa es la parte mala, la buena es que me gusta mucho todo lo que estoy aprendiendo y el echo de sentirme tan mal me da fuerzas para aprender, pero no puedo ir a la velocidad que me gustaría. Siguiendo con el tema, lo que voy a hacer es abrir una sesión por petición (session per request creo que lo llamais) a nivel del controlador. En mi aplicación estoy usando 4 capas Acceso a datos, Negocio, Controlador y Vista (con binding al controlador), lo que creo que se me ajusta mejor es tener el manejo de sesiones a nivel del controlador, ya que en una misma sesión puedo estar interactuando con dos objetos de negocio distintos, el único inconveniente que veo es que cuando quiera trabajar con algún dato que está visualizandose en pantalla tendré que hacer attach de los datos antes de navegar por los proxies o realizar cambios en los datos para guardarlos. Si en algún caso necesito actualizar los datos en pantalla que se han cambiado en otro Form, ya me inventaré alguna forma de notificar el cambio en los datos. Bueno, muchas gracias por los enlaces, son de mucha ayuda. Ya os iré contando. Saludos, On 26 nov, 15:52, Edgar Ramos <[email protected]> wrote: > 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-contr... > > <http://jfromaniello.blogspot.com/2010/11/mvp-patron-supervising-contr...>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-reacti... > > <http://jfromaniello.blogspot.com/2010/04/event-aggregator-with-reacti...> > >http://jfromaniello.blogspot.com/2010/07/event-aggregator-subscriptor... > > > <http://jfromaniello.blogspot.com/2010/07/event-aggregator-subscriptor...>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=ScreenActiva... > > > <http://www.jeremydmiller.com/ppatterns/Default.aspx?Page=ScreenActiva...>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
