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

Responder a