Gracias por tu ayuda José.

Comenzaré con cambiar un poco mi lógica y haré algo como lo que mencionas,
analizaré el comportamiento y se los muestro...

Saludos cordiales.

--
Roberto Ramírez

2010/2/16 José F. Romaniello <[email protected]>

> Como dijo Gustavo, ahora voy mas por el camino de domainevents. La idea es
> parecida, pero me ahorro tener que especificar que tengo que inyectar.
>
> Uso algo muy parecido a lo que esta en el blog de Udi Dahan, pero con
> ServiceLocator.
>
> Ahora bien, cambiar de visitors a domain events creo que no te va a
> resolver el problema. Vos dijiste:
>
> En mi modelo, el detalle de la factura no conoce los movimientos en el 
> inventario,
>> pero el movimiento si conoce a que detalle de factura pertenece.
>
>  ¿Como identificar la referencia del detalle para insertarla en
>> el movimiento si todo se ejecuta en un solo request (Session-Per-Request) y
>> aun no conozco la referencia del detalle que se guardo en la base de datos?
>
>
>
> Y que importa que no se haya guardado en la base de datos todavía, nh no es
> tan burro. Pseudo código:
>
> var factura = new Factura()
> factura.AgregarLinea(new LineaFactura())
> //domain event o lo que sea de por medio... pasando referencia a la factura
> var movimiento = new Movimiento(){ Detalle = factura....Detalle[0] }
> session.Save(movimiento)
>
> session.Save(factura)
>
>
> En tu caso algo como esto debería funcionar, el truco tal vez esta en usar
> bien los cascades.. y ese tipo de cosas. Tal vez el save de movimiento
> debería desencadenar el save de línea, que a su vez desencadena el save de
> factura.
>
> Creo que sobre este pseudocódigo podemos discutir, quiero decir saquemos de
> la discusión Visitors y DomainEvents. Lo dejo abierto.
>
>
> si vos podes, escribí un test de comportamiento así, abris una sessión y
> ejecutas ese pseudocódigo que te pase. Y decinos que pasa, que sqls ves en
> el output etc.
>
> El 15 de febrero de 2010 16:40, Gustavo Ringel 
> <[email protected]>escribió:
>
> Si entendiste la idea de los visitors DomainEvents es una forma de hacer lo
>> mismo pero en forma menos explicita, fijate en el comentario de Fabio al
>> post de Jose, y acordate que por mas lindo que sea el martillo nuevo se usa
>> un destornillador para un tornillo.
>>
>> Gustavo.
>>
>> 2010/2/15 Roberto Ramírez <[email protected]>
>>
>> Muchas gracias d00t
>>>
>>> Entonces a lo que veo es que me toca buscar sobre Domain Events para
>>> resolver mi problema, dejando fuera a NH de esto... y pues Visitor ya
>>> lo había entendido, pero al parecer no me servirá..
>>>
>>> Saludos... =)
>>>
>>> On 15 feb, 11:15, Gustavo Ringel <[email protected]> wrote:
>>> > No, mas bien algo como esto:
>>> >
>>> > http://www.udidahan.com/2009/06/14/domain-events-salvation/
>>> >
>>> > <http://www.udidahan.com/2009/06/14/domain-events-salvation/>Listeners
>>> de NH
>>> > para algo que no es especifico de datos como la creacion de un
>>> movimiento
>>> > quiere decir que a una regla de negocios la estas todavia atendiendo a
>>> nivel
>>> > de datos.
>>> >
>>> > A mi gusto Listeners de NH se pueden usar para auditoria, tracing, o
>>> cosas
>>> > que son especificas de la capa de datos y que el dia que tiras la capa
>>> de
>>> > datos no tienen mas utilidad para tu negocio.
>>> >
>>> > Con Domain Events la idea es en el momento en que pasa algo avisar que
>>> paso
>>> > por ejemplo DomainEvents.FacturaGuardada(new FacturaGuardadaEvent() {
>>> > Factura = factura, Detalles = detallesList })
>>> >
>>> > Vos tenes en algun lado un SalvarMovimientosHandler :
>>> > Handles<FacturaGuardadaEvent> y al atender el evento guarda un
>>> movimiento en
>>> > la base por cada detalle.
>>> >
>>> > Gustavo.
>>> >
>>> > 2010/2/15 Roberto Ramírez <[email protected]>
>>> >
>>> >
>>> >
>>> > > Muchas gracias por la respuesta Gustavo, me queda claro lo que
>>> > > comentas.
>>> >
>>> > > Una cuestión pequeñita... ¿un evento de dominio == listeners de nh?
>>> >
>>> > > On 15 feb, 10:51, Gustavo Ringel <[email protected]> wrote:
>>> > > > No entiendo exactamente donde entra NH en la consullta.
>>> > > > Es decir, el codigo que yo pienso para resolver eso al menos es
>>> > > > independiente de la capa de persistencia, tambien los visitors  de
>>> Jose
>>> > > son
>>> > > > independientes de la capa de persistencia.
>>> >
>>> > > > Creo que NH no es un factor para la decision de negocio. Podrias
>>> > > > transformarlo en un factor si quisieras usar Listeners o alguna
>>> cosa
>>> > > > especifica de NH para guardar el movimiento.
>>> >
>>> > > > En mi caso el servicio que guarda la factura y los detalles llama
>>> al
>>> > > > Dao/Repositorio que sabe guardar una factura y sus detalles y se
>>> genera
>>> > > un
>>> > > > evento de dominio para cada detalle de factura.
>>> >
>>> > > > Otro componente recibe esos eventos y se encarga de guardar los
>>> > > movimientos.
>>> >
>>> > > > Los visitors de Jose hacen algo parecido a eso, pero creo que
>>> tambien
>>> > > Jose
>>> > > > para esos casos  favorece domain events hoy en dia :)
>>> >
>>> > > > Gustavo.
>>> >
>>> > > > 2010/2/15 Roberto Ramírez <[email protected]>
>>> >
>>> > > > > Buenos días a todos.
>>> >
>>> > > > > ¿Puedo resolver con nhibernate esto o es un error en mi modelo?
>>> >
>>> > > > > Yo guardo una factura con su respectivo detalle, dentro de mi
>>> modelo
>>> > > > > yo necesito generar un movimiento en inventario y por cada
>>> movimiento
>>> > > > > guardar la referencia del detalle de la factura así:
>>> >
>>> > > > > Factura ==> Detalle ==> Movimiento
>>> >
>>> > > > > El proceso del movimiento al inventario es un paso intermedio al
>>> > > > > momento de guardar-actualizar mi factura.
>>> >
>>> > > > > En mi modelo, el detalle de la factura no conoce los movimientos
>>> en el
>>> > > > > inventario, pero el movimiento si conoce a que detalle de factura
>>> > > > > pertenece.
>>> >
>>> > > > > ¿Como identificar la referencia del detalle para insertarla en el
>>> > > > > movimiento si todo se ejecuta en un solo request
>>> (Session-Per-Request)
>>> > > > > y aun no conozco la referencia del detalle que se guardo en la
>>> base de
>>> > > > > datos?
>>> >
>>> > > > > Uso Visitor como patron de diseño tomado del post de J.
>>> Rommaniello
>>> > > > >
>>> http://jfromaniello.blogspot.com/2009/11/caso-practico-patron-visitor.
>>> > > ..
>>> > > > > ,
>>> > > > > el proceso del movimiento lo realizo en un Visitor.
>>> >
>>> > > > > Muchas gracias por su ayuda.
>>> >
>>> > > > > --
>>> > > > > 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
>

-- 
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