2010-01-05 12 views
8

Como se describió anteriormente, estoy implementando una arquitectura de varios niveles para trabajar con WCF y Entity Framework 4 (con poco). Como ya tengo persistencia en la ignorancia con POCO, ¿necesito implementar DTO o puedo usar WCF de manera pura?Usando un Servicio WCF con Entity Framework 4 y ... ¿DTO?

La cita principal es: necesito que DTO pase un objeto liviano en la red o puedo usar mis entidades POCO.

¿Qué recomiendan?

+1

DTO y POCO no son lo mismo. Eche un vistazo a [esta buena publicación] (http://rlacovara.blogspot.com/2009/03/what-is-difference-between-dto-and-poco.html?m=1). Si termina usando DTO, considere usar [EntitiesToDTOs] (http://entitiestodtos.codeplex.com) para generar automáticamente DTO desde su archivo Entity Framework EDMX. – kzfabi

Respuesta

3

Es difícil de responder a menos que defina lo que es la "manera pura". ¿Estamos hablando de SOA puro o WCF puro?

Los proxies WCF ya son DTO en cierto modo porque no traen ninguna lógica de negocios a través de su contrato de servicio. Crear otra capa de DTO encima de las clases de proxy generadas por WCF parece redundante.

La pregunta más importante que desea responder es "¿cómo SOA es esta solución?". No puede compartir sus entidades POCO a través de los límites del servicio si desea cumplir con SOA. SOA se trata de contratos dispares.

Si va a SOA basado en que pierde mucha funcionalidad porque las clases con las que trabajará su nivel web la mayoría del tiempo serán proxenetas estúpidos. Tendrá que repetir mucha lógica y perderá muchas de las funciones de "metadatos, convenciones sobre la configuración" que ofrece MVC 2.

Si arroja la palabra de moda SOA en la trituradora, lo que debe hacer (http://soafacts.com/), entonces le resultará mucho más fácil compartir la lógica de negocios y la información de metadatos en niveles. Si el único consumidor de su servicio web es usted mismo que este método, es probablemente su mejor opción.

Aquí es donde podría usar los DTO para enviar a través del cable en lugar de sus entidades POCO. El único inconveniente es nuevamente, repetir la lógica, y un montón de código ceremonial de placa de caldera que no hace nada. Realmente depende del tamaño de tu proyecto. Si es pequeño, olvídese de los DTO, pero si tiene 20 desarrolladores que trabajan con 200,000 LoC, los DTO probablemente valgan la pena.

1

Como dijo jfar, depende de si usted va a ser el único que consume el servicio, o si el nivel de presentación será el único.

Si está haciendo lo posterior y solo va a utilizar su servicio, puede serializar POCO en los límites del servicio wcf. Esto es algo que hice recientemente y escribí este blog post para que funcione. Esto le permitirá usar las mismas entidades en el nivel de la aplicación, así como en el nivel de presentación.

Espero que ayude.

1

La razón más fuerte para recomendar un DTO cuando se usa WCF con EF es que las clases de base de datos de EF arrastran las dependencias de implementación a sus clases de proxy. Si usa código primero con clases POCO, entonces no debería haber dependencias de implementación.

Intente devolver solo sus clases de POCO, pero luego observe de cerca las clases de proxy generadas. Asegúrese de que no haya nada en esas clases que sea parte de la infraestructura de EF. Si las clases proxy están limpias, entonces debería estar todo listo.

Cuestiones relacionadas