2010-09-08 16 views
6

Tengo un contrato de datos, por ejemplo, Usuario. Es serializable y atraviesa el cable. Quiero un Operation Operation SaveUser(). Puedo mantener SaveUser (Usuario usuario) en mi contrato de servicio como un contrato de operación. ¿Pero puedo mantenerlo dentro de mi contrato de datos como su propio comportamiento?¿Puede un contrato de datos WCF contener un contrato de operación WCF dentro de él? ¿Por qué?

Guardar() idealmente debería guardarse. De acuerdo con los principios OO, cada contrato de datos debe saber cómo salvarse y los detalles deben abstraerse del mundo exterior.

¿Esto es posible en WCF?

Respuesta

9

Yo diría que no, y con razón. Aunque estoy de acuerdo con usted en los principios de OO y la encapsulación, WCF trata con los principios SO (orientados al servicio). Piense en esto en términos de un reproductor de CD y CD. El reproductor de CD es el servicio. El CD es el contrato de datos. Los principios OO requieren que el CD tenga un método Play para poder jugarse a sí mismo. Pero, hay mucho más para jugar un CD que conocer sus datos. Está la electrónica, la interfaz de las tomas de salida, etc. Todo esto lo proporciona el reproductor de CD ... el servicio. Es por eso que su Contrato de Servicio tiene el método Play, y acepta el CD como un Contrato de Datos diciéndole QUÉ jugar (y no CÓMO jugarlo).

EDITAR después de la pregunta en su comentario: Sin duda (con suerte) no. El peor caso es que tendrá 34 contratos de servicio, cada uno con un promedio de 6 métodos. Y este es solo el caso si está seguro de que cada uno de los métodos en cada clase DEBE pasar como una operación de servicio. Hay 2 aspectos que debes considerar. Aspecto 1: el diseño de sus servicios. En lugar de 34 contratos de servicio, debe agrupar las 34 clases en una agrupación que tenga sentido y crear 1 contrato de servicio por grupo. Por ejemplo, puede terminar con un servicio de gestión de inventarios, un servicio de procesamiento de órdenes de ventas y un servicio de operaciones de fondo de escritorio. Cada uno de estos servicios contiene las operaciones de servicio (y contratos de datos) relevantes para el rango de clases agrupadas en su dominio. Aspecto 2: Qué está pasando en el cliente. Mencioné que debe considerar si los métodos de cada clase DEBEN ser operaciones de servicio de WCF. Ciertamente hay razones para tener clases de negocios ricas y completamente encapsuladas en el cliente. Y cuando sus operaciones no necesitan ejecutarse como operaciones de servicio, estas operaciones ejecutan su lógica en el dominio del cliente. La pregunta es cómo llegar al cliente a través de un servicio, y aquí tiene dos alternativas: a) instanciar una instancia en el cliente y completar sus propiedades desde el DataContract devuelto por una operación de servicio. b) devolver el objeto directamente desde una operación de servicio, como se hace en un marco como CSLA (y creo que DevForce sigue un enfoque similar para devolver clases de negocios a través de un Servicio WCF). HTH

+1

Entonces, si tengo 34 clases con 6 métodos públicos en promedio en cada clase, ¿tendré 204 métodos de contenedor en el servicio? ¿esta bien? –

+0

Agradable respuesta ... Muy útil para despejar mis dudas. – Pranav

Cuestiones relacionadas