2010-09-28 11 views
31

Estamos comenzando un nuevo producto basado en web en el que estamos planeando exponer nuestra lógica comercial a través de los servicios de WCF. Usaremos ASP.NET 4.0, C#, EF 4.0. En el futuro, queremos crear aplicaciones para iphone y aplicaciones WPF basadas en los servicios. He estado leyendo mucho sobre el uso de POCO vs Entidades de seguimiento automático (STE) y, según entiendo, las ECE no funcionan bien con el escenario web. ¿Alguien puede arrojar más luz sobre este tema?Entidades de seguimiento personal frente a entidades de POCO

+0

Agradezco que esta pregunta se haya formulado hace un tiempo, pero tengo curiosidad por saber qué decidió finalmente. la situación POCO vs STE? –

Respuesta

36

Para mí STE es un concepto absolutamente erróneo. Es solo otra implementación de DataSet.

  • En la aplicación ASP.NET tendrá que almacenar las ECE en algún lugar entre las solicitudes. En la primera solicitud consultará su origen de datos para obtener STE y proporcionar datos en la página. En la próxima solicitud (postback), querrá modificar STE con datos devueltos del navegador. Para admitir el seguimiento, deberá usar el mismo STE que en la primera solicitud = >; tendrá que almacenar STE en viewstate (si desea usar ASP.NET WebForms) o sesión.
  • STE es inútil para SOA o la interoperabilidad. La lógica de seguimiento es parte de STE = se está ejecutando en el cliente. Si expone STE en el servicio, espera de inmediato que ese lado del cliente use las mismas características de rastreo incluidas en la lógica STE. Pero estas características no se proporcionan al otro lado automáticamente. En .NET los tiene porque comparte ensamblado con STE. Pero en otra plataforma tienes que explicarles a los desarrolladores cómo implementar la lógica STE para que funcione de tu lado. Este será probablemente el caso más limitante para usted debido a la aplicación de iPhone.
+0

En ASP.NET, ¿por qué no solo mostrar el STE al primer pedido y en la devolución de datos obtener STE de la base de datos, actualizar los campos y guardar? –

+2

Si está satisfecho con la consulta de bases de datos adicionales, no necesita ningún STE, excepto la modificación de gráficos de objetos complejos. Puede dejar que ObjectContext (con proxies POCO) rastree los cambios por usted. –

+0

"STE es inútil para SOA o interoperabilidad". Estoy de acuerdo completamente. Desafortunadamente, la gente parece insistir en ver SOA y WCF como algo remoto. Claro, PUEDE hacerse, pero luego está poniendo mucha confianza en el cliente. –

7

Entidades de seguimiento automático funcionan perfectamente en un entorno MVC Web con WCF. He estado involucrado en 2 proyectos usándolos (uno en producción, uno casi).

Con POCO perderías cualquier cambio de seguimiento sobre el cable, lo que crea una gran cantidad de dolor adicional porque EF ahora tiene que volver a consultar para obtener información del estado. Si utilizas EF y WCF STE resuelves muchos problemas y haces que todo tu pipeline de persistencia sea realmente fluido.


¿Puede proporcionar la citación para este reclamo? "Las ECE no funcionan bien con el escenario web"

+1

¿Cómo persiste su STE entre las solicitudes (por ejemplo, GET -> POST)? –

+0

@jfar, en el escenario de WCF, el concepto de "Servicios independientes de plataforma" se pierde si usa STE (a.k.a Entidades de seguimiento propio). Por ejemplo, ¿qué sucede si hay una aplicación de cliente Java que desea interactuar con el servicio WCF? ¿Cómo obtendría Java Client Application los SET en el lado del cliente? Desafortunadamente, ¡simplemente no puede! Significa que, si estamos usando STE, nuestro servicio WCF solo puede ser utilizado por clientes integrados en .Net. Lo cual es terrible ¿no? – Baig

2

Si este servicio va a ser consumida por cualquier aplicación que no tiene control directo sobre, probablemente debería considerar seriamente la posibilidad de divorciarse nada que ver con EF (o NHibernate o Linq2Sql o cualquier otra solución de gestión de la persistencia de datos) de sus servicios y sus objetos de transferencia de datos. Esto aislará los cambios internos de clientes rotos. Romper clientes es típicamente algo malo.

Cuestiones relacionadas