si, tu aproximacion es buena, yo tambien devolvia por ej listas readonly pero nhibernate no me dejaba, tuve que devolverlas asi como estan y son susceptibles a ser modificadas, con respecto a que la clase padre sea la responsable de crear y agregar a los hijos, tambien es muy bueno, yo tambien hacia algo asi pero me faltaba algo, ajja tu ejemplo me hizo acordar a uno de los patrones grasp el patron experto
On Apr 5, 7:39 am, Carlos Peix <[email protected]> wrote: > Hola Raul, > > Te cuento como lo resuelvo yo, por ahi te sirve. > > No me gusta exponer las colecciones directamente, si tengo que > exponerla devuelvo una coleccion read-only. Por este motivo, el codigo > que agrega el elemento a la coleccion debe estar dentro de la clase, > lo cual es bueno por varios motivos que podemos charlar en otro post. > Entonces me queda un metodo asi, mas o menos: > > public cass Factura { > ... > public ItemFactura AgregarItem(Producto producto , int cantidad) { > ItemFactura item = new ItemFactura(this, producto, cantidad); > items.Add(item); > } > ... > > } > > El constructor de la clase ItemFactura seria asi: > > public class ItemFactura { > ... > public ItemFactura(Factura factura, Producto producto, int cantidad) { > this.factura = factura; > ... > } > ... > > } > > De esta manera queda armada la relacion bidireccional. > > Tener el codigo dentro de la clase Factura es bueno porque imaginate > que tu cliente te dice: cuando agrego un producto que ya esta en la > factura, no agregues un item, sumale la cantidad al que ya esta > definido. Si tenes el codigo fuera, tendrias que revisar todos los > lugares donde lo tenes, si lo tenes dentro, es mas facil. > > public ItemFactura AgregarItem(Producto producto, int cantidad) { > ItemFactura itemExistente = BuscaItemPorProducto(producto); > if ( itemExistente != null ) { > itemExistente.AgregarCantidad(cantidad); > } > else { > ItemFactura item = new ItemFactura(this, producto, cantidad); > items.Add(item); > } > } > > Por identico motivo, no hago itemExistente += cantidad sino que llamo > a un metodo para que tambien esa logica quede integrada donde > pertenece. > > Un saludo > > Carlos Peix > > 2009/4/4 Raul Carlomagno <[email protected]>: > > > > > no lo agregue a la lista, pero a ese item le digo que va a pertenecer > > a tal factura, no cuenta eso? tengo que asociarlo por ambos lados? --~--~---------~--~----~------------~-------~--~----~ Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano -~----------~----~----~----~------~----~------~--~---
