Ja.. Mil gracias por permitirme escuchar esto.
Gustavo, no temas.. que a mí me pasaba lo mismo. Hasta hace poco moría
buscando por internet una herramienta que me permitiese crear DTOs a partir
de objetos de NH y después hacer la operación inversa. Te encuentras de
todo, hasta clases genéricas, Clones, Serializables, pero todos al final
tienen un gran problema, y es justamente lo que menciona Carlos, al final,
tenemos objetos por gusto y pasamos datos entre capas que ni son necesarias.
Hace poco comencé un proyecto, la conclusión que saqué de toda mi búsqueda
por internet fue precisamente la que acaba de exponer Carlos. Por eso doy
mil gracias por saber que no estaba en un error.
Salu2
Omar
De: NHibernate-***@googlegroups.com
[mailto:NHibernate-***@googlegroups.com] En nombre de Carlos Peix
Enviado el: Monday, December 03, 2007 11:27 PM
Para: NHibernate-***@googlegroups.com
Asunto: [NHibernate-Hispano] Re: [OT] Re: consulta sobre buen diseño
Hola Gustavo,
Nota: Creo que esto es util para todos pero tambien me parece que es un OT,
asi que lo marque en el asunto.
Te cuento como pienso yo estos casos.
Los DTOs los entiendo como objetos especificos para resolver las necesidades
de comunicacion en un caso determinado. Nunca comienzo creando un DTO por
cada objeto de dominio. Eso me ha llevado a tener objetos que nunca uso y a
que me falten objetos o que no sea eficiente con los DTOs.
Entonces, en el caso que planteaste crearia un DTO especial para la
"pantalla de edicion masiva de numeros de telefono". Este DTO tendria cuatro
propiedades: CUIT (clave tributaria), Descroipcion del proveedor, tenefono
actual, telefono nuevo (inicialmente igual al actual).
Devolveria una coleccion de estos objetos desde la consulta y el cliente
editaria esos datos. Luego el cliente me envia al webservice solo los
objetos que fueron editados y el servicio haria los cambios sobre el modelo.
Si esta coleccion de telefonos editados la colocas en un objeto especial
llamado (por ejemplo) CambioDeTelefonosRequest tenes el mensaje que menciona
Angel. El servicio respondera con el correspondiente mensaje XXXX.Response y
listo.
Saludos
Carlos Peix
_____
From: NHibernate-***@googlegroups.com
[mailto:NHibernate-***@googlegroups.com] On Behalf Of Gustavo Ringel
Sent: Domingo, 02 de Diciembre de 2007 05:15 p.m.
To: NHibernate-***@googlegroups.com
Subject: [NHibernate-Hispano] Re: consulta sobre buen diseño
Hi Angel, basicamente respondes. Ahora una consulta respecto a eso...segun
tu opinion digamos que en el dominio yo tengo una entidad compleja, por
decir algo "Proveedor" identificada por un ID Int32.
Supongamos que tengo varios elementos en la base asociado al proveedor, pero
mando datos a una consulta en la que paso por todos los proveedores y solo
quiero actualizar el telefono si es necesario.
El servicio seria por ejemplo GetProveedores(Algun filtro) y
SetTelefono(DTOProveedor) donde DTOProveedor seria un ID + Telefono?
Es decir, vos le revelarias al cliente que utilizas el campo ID para
identificar cuando vuelve? ese es justamente el problema que yo no logro
solucionar elegantemente, si maniana quiero cambiar a GUID la identificacion
o el tipo de datos no es suficiente para la cantidad de datos manejados,
tengo que cambiar todos los DTO, mas los servicios...
Bue, capaz que me equivoco en la direccion de lo que vos decis.
Entiendo que no es una pregunta de NHibernate directo asi que pido
disculpas, pero la idea es justamente que NHibernate sea el manejador de la
persistencia y obtencion de datos del lado del servicio y estoy buscando la
forma de comunicarme con la capa de presentacion de manera adecuada...
Gustavo.
On Dec 2, 2007 10:01 PM, Angel Java Lopez <***@gmail.com> wrote:
Hola gente!
Algunos comentarios, algo alejados pero relaciones a la pregunta original:
- Creo que el tema de que "vuelvan" DTOs hasta el dominio que son
representacion casi igual de los objetos del dominio, casi solo se da en los
casos de ABM (altas, bajas y modificaciones).
- Trato de imaginar un dominio, donde el NHibernate es apenas el encargado
de la persistencia, ortogonal al dominio, idealmente transparente.
- El dominio es un "bicho" al que le enviamos mensajes y comienza a
trabajar. El mensaje llega desde otro lado, quizas desde la presentacion.
Caso tipico: en un sistema de consorcios, le enviamos a calcular la
liquidacion de un consorcio. No le enviamos desde la presentacion al dominio
un consorcio: apenas le enviamos algun identificador, y un rango de fechas
de gastos a liquidar (espero que se entienda el ejemplo, fuera de Argentina)
- A presentacion van y vuelven mensajes, adecuados al paso(s) del caso de
uso que tengamos entre manos. Si los DTOs se deben adecuar a la forma de
transporte o exposicion (p.ej., tener un [DataContract] en WCF, o tener
[Serializable] en Remoting), es un tema tecnologico que a dominio, y su
persistencia en NHibernate, apenas le deberia importar. Si no hay tema de
transporte remoto, igual me gustaria pensar en mensajes, adecuados al caso
de uso, y si envio un objeto de dominio, tener todo el "awareness" de que
estoy haciendo eso, por alguna razon tactica o pereza.
A veces, veo muchas preguntas sobre el uso de NHibernate, pidiendole que
haga cosas que no son su responsabilidad (no digo que sea el caso de la
pregunta de abajo, que apunta a otra cosa, solo queria aprovechar este
mensaje para enviar esta opinion). Creo que puede pedirse algo asi, pero
estar "aware", advertidos, que no es la herramienta para dar DTOs, o para
clonarlos o lo que sea. Si lo usamos de esa manera, es por una razon tactica
oportunista: simplificar lo que estamos haciendo, escribir menos codigo
(algo que cualquier usuario de AjGenesis ni tiene que temer... ;-), y
otras....
No se si aclare u oscureci.... ;-)
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com/
----- Original Message -----
From: Gustavo Ringel <mailto:***@gmail.com>
To: nhibernate-***@googlegroups.com
Sent: Sunday, December 02, 2007 12:44 PM
Subject: [NHibernate-Hispano] consulta sobre buen diseño
Hi, tengo un lio que siempre que empiezo una nueva aplicacion, dudo como
diseñar correctamente y nunca llego a algo concreto.
Hoy en dia en mi aplicacion cree DTO's, que tienen la version de las
business entities como las ve el cliente. Si bien mi aplicacion no esta
distribuida, los servicios igual devuelven y reciben DTO's, la idea en su
momento era por un lado no mandar informacion a las vistas que no les
interesa y ademas posibilidad de escalar a WCF o Web Services o lo que fuera
con facilidad.
Esto quiere decir que para business entity tengo que transformar la entidad
en DTO y viceversa.
Ahora estoy escribiendo una nueva aplicacion y nuevamente me veo obligado a
duplicar informacion cuando la aplicacion cliente y servidor por ahora son
la misma, y por razones de ambiente tampoco creo que trabaje WCF/Remoting o
ninguna alternativa...
Basicamente salvo que no tiene nada que hacer con la informacion extra,
podria leer un objeto nhibernate, clonarlo para desconectarme del proxy y
devolver el mismo tipo de objeto al cliente. Cuando el cliente me manda un
objeto de vuelta podria hacer Load del id y trabajar con el objeto
NHibernate...
Claramente esta ultima opcion parece muy sucia a nivel del codigo. Ahora la
pregunta es que hacen ustedes...tambien si la session de nhibernate la
manejan a nivel de servicios como hacen para trabajar con transacciones
multiservicio...(TransactionScope?)
Gracias.
Gustavo.
<BR
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-***@googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---