Pregunta

Tengo curiosidad por saber lo que la comunidad piensa sobre el tema. Recientemente he llegado a la pregunta con un escenario NHibernate / WCF (entidades persistieron en la capa de servicio) y se dieron cuenta de que puede estar pasando la dirección equivocada aquí.

Mi pregunta es claramente, cuando se utiliza un gráfico de objetos persistentes (NHibernate, LINQ a SQL, etc.) detrás de un servicio web (WCF en este escenario), qué prefiere enviar todas las sociedades sobre el alambre? ¿O crear un conjunto de más ligero DTO (sans referencias cíclicas) a través de?

¿Fue útil?

Solución

dtos. Utilice AutoMapper para el mapeo de objeto a objeto

Otros consejos

He estado en este escenario varias veces antes y puedo hablar de la experiencia en ambos lados. Al principio yo estaba serializar mis entidades y enviarlos de inmediato. Esto funcionó bien desde un punto de vista funcional, pero cuanto más miraba en él más me daba cuenta de que estaba enviando más datos de los que necesitaba y que estaba perdiendo la capacidad de variar la puesta en práctica de cualquier lado. En las aplicaciones de servicios posteriores que he tomado a dtos creados cuyo único propósito es obtener datos hacia y desde el servicio web.

Fuera de cualquier interoperabilidad, tener que pensar en todos los campos que se envían a través del cable es muy útil (para mí) para asegurarse de que no estoy enviando datos que no se necesita o peor, no deben recibir abajo al cliente.

Como otros han mencionado, AutoMapper es una gran herramienta para la entidad a la cartografía DTO.

He creado casi siempre dtos para transferir sobre el alambre y utilizar entidades Richter en mi servidor y el cliente. En el cliente que va a tener un poco de lógica de presentación común, mientras que en el servidor que tendrán la lógica de negocio. Correspondencia entre los dtos y las entidades puede ser tonto, pero es necesario que suceda. Herramientas como AutoMapper le ayuden.

Si usted está pidiendo puedo enviar entidades serializados desde un servicio web con el mundo exterior? entonces la respuesta es definitivamente no, vas a conseguir la interoperabilidad mínimo si se hace eso. DTO ayudar a resolver este problema mediante la definición de un conjunto de 'objetos' que se pueden crear instancias en cualquier idioma ya sea que esté usando C #, Java, Javascript o cualquier otra cosa.

Siempre he tenido problemas para enviar objetos Nhibernate sobre el alambre. En particular, si el uso de un modelo ActiveRecord. y / o si el objeto tiene vínculos con la sesión (puaj). Otro resultado desagradable es que NHibernate puede tratar de cargar el objeto a la entrada del método (antes de que pueda llegar a ella) que también puede posiblemente causar problemas.

Así que ... hacer llegar el mensaje aquí? Averías, reparación de problemas de DTO ... todo el camino

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top