Como una opción podrias manejarte marcando las entidades como nuevas,
o como borradas o como sucias:
public class Entity : IEntity
{
protected bool _Deleted = false;
protected bool _IsNew = true;
public virtual void MarkAsDeleted()
{
_Deleted = true;
}
public virtual bool IsDeleted()
{
return _Deleted;
}
public virtual bool IsNew()
{
return _IsNew;
}
public virtual void MarkAsNew()
{
_IsNew = true;
}
public virtual void MarkAsSaved()
{
_IsNew = false;
}
Estaba usando esto en una pantalla, que tenía la cabecera y las lineas
(típico Factura/LineaFactura).
De modo que todas la lineas implementaban esta clase, es decir, la
heredaban. Y abajo había dos botones: GUARDAR y CANCELAR.
Cuando terminabas de hacer todos los cambios que podian ser:
Borrar alguna linea nueva.
Borrar alguna linea existente (que ya habia sido guardada previamente
en la base).
Actualizar alguna linea nueva
Actualizar alguna linea existente
Nueva Linea (no se guarda hasta que se haga GUARDAR)
Apretas GUARDAR y podrías tener un proceso:
así: Factura.Guardar(); (asumo que la factura ya tiene las lineas adentro)
o así: FacturaBizComponet(Factura, DetalleFacturaList); (paso los params)
y estos procesos se encargarían de hacer efectivos los cambios en la base.
On 2/2/07, Guillermo Ruffino <[EMAIL PROTECTED]> wrote:
>
>
>
>
> Muy bueno Ángel,
>
> Creo que usar capas es como usar herencia en las tareas de la aplicación, y
> son esenciales a la hora de aplicar un DRY (Don't repeat yourself) pero como
> mi aplicación es Windows y estoy apurado, de momento el exe es lo que hace
> todo (si, ya se que el assembly no es una capa) y surgirá algo mas separado
> si es necesario.
>
>
>
> Yo en realidad quería preguntar algo mas simple que un paradigma de esos, mi
> pregunta mejor formulada seria:
>
>
>
> Si estas editando una lista de "Personas" y le dejas al usuario hacer Add /
> Remove / Delete, como le haces el seguimiento a los objetos después para
> llamar al Save, Update o Delete a cada Entidad?
>
> Yo de momento lo estoy solucionando con una lista: personasAAgregar,
> personasAEliminar, personasAActualizar, como es la primera vez que tuve que
> hacer algo asi y nunca vi como lo soluciona otra persona (es lo ke se me
> ocurrió que iba a funcionar con nhib y por eso lo use) quería saber si
> alguien tenía otra alternativa a este problema.
>
>
>
> PD:
>
> Persona p = new Persona()
>
> p.Nombre = "..."
>
> session.Save(p)
>
>
>
> se puede plantear algo como
>
>
>
> Persona p = new Persona()
>
> p.Nombre = "..."
>
> ServicioPersona.Save(p)
>
> Eso esta bueno, me hace pensar que interponer una capa entre la UI (win o
> asp o xml) y Nhib (o datos) va a ser no-op's.
>
>
>
> Gracias!!!
>
>
>
>
>
> From: [email protected]
> [mailto:[EMAIL PROTECTED] On Behalf Of
> Angel "Java" Lopez
> Sent: Friday, February 02, 2007 10:45
> To: [email protected]
> Subject: [NHibernate-Hispano] Re: Estilos de programacion y preguntas
>
>
>
>
>
> Hola gente!
>
>
> Interesante tu pregunta, Guillermo. Algunos comentarios sobre como en
> general trabajo...
>
>
>
>
>
> Yo prefiero tener una capa de servicio, una simple fachada, que me brinde
> toda la funcionalidad que necesita mi presentacion (o las posibles
> presentaciones que luego aparezca). Asi, en vez de
>
>
>
>
>
> Persona p = new Persona()
>
>
> p.Nombre = "..."
>
>
> session.Save(p)
>
>
>
>
>
> se puede plantear algo como
>
>
>
>
>
> Persona p = new Persona()
>
>
> p.Nombre = "..."
>
>
> ServicioPersona.Save(p)
>
>
>
>
>
> Ahora, igual aca se puede plantear otro tema: esto es un simple CRUD de
> personas. Llegara el momento, o la aplicacion, donde la logica del dominio,
> del problema a resolver, no sea tan simple. Apareceran actividades a
> implementar, mas grandes que simplemente insertar una persona en la base. Me
> imagino:
>
>
>
>
>
> Empleado e = new Empleado(....datos del nuevo empleado....)
>
>
> ServicioRecursosHumanos.NuevoEmpleadoContratado(e)
>
>
>
>
>
> En ambos casos, recurro a Servicio, una capa de servicio. Si de ahi para
> abajo, hay NHibernate, o lo que sea, no me interesa en general.
>
>
>
>
>
> Despues, podemos discutir la linea
>
>
>
>
>
> Empleado e = new Empleado(....datos del nuevo empleado....)
>
>
> Porque tener empleado ahi? Y si ponemos en vez del new una factoria? Bueno,
> a veces, solo a veces, necesitaremos algo mas, para un proceso de negocio
> mas dificil, no enviamos solo entidades. Enviamos mensajes, que llegan a la
> capa de servicio, y hacen actuar a nuestro modelo del negocio. Me imagino un
> proceso que necesite hacer una transferencia entre dos cuentas, pueden tener
>
>
>
>
>
> ServicioTransferencia.Transferir(idctaorigen,idctadestino,importe)
>
>
>
>
>
> Abajo de eso, levantaremos las entidades cuentas, lo que sea, o llamaremos a
> un procedimiento almacenado, o lo que hayamos decidido hacer.
>
>
>
>
>
> Luego, en algun momento habra que investigar las ideas de Domain Driven
> Design, donde entonces el NHibernate empieza a brillar, al posibilitar
> implementar DAOs, invocados desde repositorios, sin "molestar" mucho en
> nuestro modelo de domino. Veria el libro y los enlaces de:
>
>
>
>
>
> http://ajlopez.wordpress.com/tag/domain-driven-design/
>
>
>
>
>
> Jeje... y como siempre, servicio, entidades, mapeo NHibernate, base de
> datos, lo genero con AjGenesis, ver el ejemplo
> http://msmvps.com/blogs/lopez/archive/2006/03/07/85650.aspx
>
>
>
>
>
> (hay en la pagina del proyecto, templates para Domain-Driven Design, que
> estoy mejorando).
>
>
>
>
>
> DataSets los uso para enviar desde servicio, datos a la presentacion, en
> general para ligar a grillas. Sino, en general, envio lo que en java serian
> beans, simples objetos con datos adentro, que se ligaran a la presentacion,
> y luego volveran de alguna forma al servicio.
>
>
>
>
>
> Nos leemos!
>
>
> Angel "Java" Lopez
> http://www.ajlopez.com/
> (yes!! it's my sabbatical week!!!....
> http://ajlopez.wordpress.com/2007/01/27/sabbatical-week/ )
>
>
>
> ----- Original Message -----
>
>
> From: Guillermo Ruffino
>
>
> To: [email protected]
>
>
> Sent: Thursday, February 01, 2007 11:43 PM
>
>
> Subject: [NHibernate-Hispano] Estilos de programacion y preguntas
>
>
>
>
> Hola, les cuento que estoy haciendo con un companiero una aplicación TIPICA
> de ventas.
>
> En fin, es muy nuevita y la estamos encarando con .net 2 y generics.
>
> Tenemos partes con DataSets y otras partes con NHibernate.
>
> Mi trayectoria es el siguiente, cuando naci existía GWBasic, y aprendi base
> de datos relacionales después de aprender orientación a objetos, (un poco al
> revés)
>
> Mi primer trabajo serio (en cuanto a calidad de la aplicación) fue un
> orientado a objetos con serializacion binaria.
>
> Despues de eso tuve ke caer en la realidad y termine con typed DataSet en
> .net 1.1
>
> Ahora trabajo mucho con ASP.NET y mucho con reporting, y reporting no es un
> escenario ideal para nhib, asi ke no lo uso en ASP.NET.
>
> Estoy dando mis primeros pasos con NH en una aplicación Windows, y me gusta
> la programación de capas aplastadas (sin capas casi) entonces en el botón
> aceptar tengo un Session.Save();
>
>
>
> Lo que me gusta de DataSets es que se trabaja en memoria y luego el usuario
> decide si le da a Aceptar() o a Cancelar().
>
>
>
> En NH sin embargo, lo único que estoy viendo de momento es almacenar listas
> de objetos que necesiten Save, Delete y Updates! Me parece un poquito
> incomodo y saber si alguien tiene alguna experiencia en compartir
>
>
>
> Saludos
>
>
>
>
>
>
>
>
> >
>
--
Dario Quintana
http://blog.darioquintana.com.ar
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección:
[email protected]
Para más, visite: http://groups-beta.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---