Creo que hay más motivos por los que pasar entidades fuera del contexto local de la aplicación no es una buena idea, incluso con un modelo de dominio completamente anémico como los tuyos. Por ejemplo, la seguridad... Compruebas que el cliente haya modificado únicamente lo que tu le dejes, antes de hacer un update, (o saveOrUpdate, o merge, o lo que sea) con el objeto que te viene de fuera? O te fías del "cliente"? (grave fallo de seguridad, en tal caso). Aparte, serializas los proxies de las propiedades lazy-loading? o qué serializas? Eso de "Limpiar" objetos Nhibernate mediante reflexión es una grandísima idea y me gusta mucho, he hecho algún intento en el pasado (intentando pasarle objetos Hibernate a Google Web Toolkit, por ejemplo :) pero no lo he usado nunca en nada serio. Cómo defines los fetch-plans? es decir, hasta qué profundidad del grafo de objetos preparas para ser transferido? Y cómo le das esa info a la capa de reflexión? Xquery o algo así?
Creo que escupir entidades completas por un canuto de red está mas cerca de arquitecturas cliente-servidor de-antes que de arquitecturas 3(omás)-tier modernas. Prefiero limitar los DTOs a la-información-que-necesita-ese-caso-de-uso-y-nada-más en vez de ir pasando grafo de entidades completo que requiera o pueda requerir + la habilidad de lazy loading remoto. Así, los "mensajes" que atraviesan la red están predefinidos (representaciones de DTOs serializados en XML o en binario o en lo que corresponda), lo cual es mucho más correcto desde el punto de vista de un protocolo de red. 2007/1/29, "Andrés G. Aragoneses [ knocte ]" <[EMAIL PROTECTED]>: > > Angel "Java" Lopez escribió: > > Hmmm.... Dario, en mi opinion, lo mas limpio es enviar un mensaje, un DTO. > > El mapeo del NHibernate, lazy loading, y demas, queda mas claro puesto y > > visto solamente desde el servidor. Lo ideal, desde un modelo de dominio. > > > > Pero a una aplicacion externa, a un cliente remoto, y demas, le enviara un > > clasico DTO, adecuado a lo que necesita en ese momento. Apareceran entonces > > fachadas remotas, encargadas de resolver como conversar con lo que ya > > tenias, y enviar y recibir DTOs en cada servicio expuesto remotamente. > > > > Claro, por ahi hay que armar clases adicionales, y conversores de objetos de > > dominio a DTOs y demas.... Pero ya estaras adivinando quien generara el > > codigo... :-) > > Vaya, parece que llego un poco tarde a esta conversación tan interesante :) > > Por si a alguien le interesa, yo he enfocado la solución a este problema > desde otro punto de vista: > > Las clases de mi modelo (que son leídas por NHibernate) se podría decir > que no tienen ningún tipo de lógica de negocio (prefiero sacarla al > Controlador en lugar de que se queden en el Modelo; ya sabéis, MVC ;) ), > por tanto se podrían calificar de DTOs. > > Como uso NHibernate en lugar de ActiveRecord, los únicos "metadatos" que > tengo que eliminar para transferir objetos son las colecciones internas > de NHibernate y los objetos con proxy, que se traducen en objetos o > colecciones vagas. > > Esta transformación la hago mediante un método que usa Reflection para > examinar su contenido. He optimizado el método lo máximo posible con las > técnicas de optimización de Reflection que he ido aprendiendo. > > El resultado final es que no hacen falta generadores de código ni clases > adicionales, por lo que yo creo que no está nada mal. > > Más info: > > http://knocte.blogspot.com/2006/12/serializacin-binaria-con-nhibernate.html > > > Por cierto, en cuanto a diferencias entre el framework 2.0 e Indigo > (WCF), a mí se me ocurren dos importantes: > > - Posibilidad de conexión bidireccional directa sin pérdida de canal en > cada llamada (algo al estilo del canal bi-direccional de Ingo Rammer). > [Aunque aún no he investigado cómo se hace :D ] > - Posibilidad de serialización XML de objetos cíclicos. [Idem] > > Un saludo, > > Andrés [ knocte ] > > -- > > > > > > --~--~---------~--~----~------------~-------~--~----~ Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups-beta.google.com/group/NHibernate-Hispano -~----------~----~----~----~------~----~------~--~---
