none
Programacion por Capas en WCF RRS feed

  • Pregunta

  • Saludos comunidad, tenia la siguiente duda,

    En una capa donde esta un WCF se tiene la interfaz y la clase del servicio web, en la interfaz tambien se pueden declarar clases a usar en el servicio web.

    Es posible ampliar a mas capas el servicio web? estaba pensando hacer una capa de acceso a datos y en la capa de las clases del servicio web pasar los parametros respectivos a la capa de acceso a datos y que la capa del servicio web actue como un capa de negocios.

    Gracias por su tiempo.


    • Editado RealMaster sábado, 12 de septiembre de 2015 15:20
    sábado, 12 de septiembre de 2015 15:08

Respuestas

  • Sí, claro que se puede ampliar a más capas lógincas ("layers") y/o capas físicas ("tiers"). A estos efectos, el servicio web equivale a lo que sería la capa de presentación en otro proyecto. Es decir, el servicio "presenta" una interfaz ante los programas que lo consumen, y luego ejecuta el código en una serie de clases que pueden ser tan complejas como se necesite y dividirse en las capas que sean oportunas para el servicio que se ofrece. Es perfectamente normal que la capa de "presentación" (que es la que implementa la interfaz) a su vez llame (por ejemplo) a una capa de negocio y esta a su vez a una capa de datos, y posiblemente que exista una capa de comunicación que enlace las tres anteriores, y puede que una capa de servicios invocada desde varias de ellas, si es que la complejidad del servicio es lo bastante grande para beneficiarse de este diseño.

    Por cierto, no necesariamente la interfaz y la clase del servicio se tienen que compilar juntas en la misma capa física. Es bastante común separar la interfaz a una DLL distinta, de forma que se pueda entregar a los desarroladores que hagan una capa cliente en la que no se genere el código directamente a partir del MEX, sin tener que darles el código ejecutable contenido en las clases, que se compila en otro ejecutable aparte y se deja únicamente en el servidor (mientras que la interfaz se duplica en el servidor y el cliente).

    • Marcado como respuesta RealMaster sábado, 12 de septiembre de 2015 19:11
    sábado, 12 de septiembre de 2015 15:30
  • Las clases del [DataContract] son las que se comparten entre el servicio WCF y los llamantes del servicio. Si su contenido resulta ser el mismo que se transporta entre las capas del servicio, entoonces las mismas clases pueden usarse para las dos cosas. Es lo que yo en mi anterior respuesta llamé la "Capa de Comunicación" (porque contiene las clases que comunican datos entre capas), pero que tú has llamado "Capa de Entidades". Con independencia del nombre que le pongamos, la finalidad es la misma.
    • Marcado como respuesta RealMaster sábado, 12 de septiembre de 2015 19:11
    sábado, 12 de septiembre de 2015 17:25

Todas las respuestas

  • Sí, claro que se puede ampliar a más capas lógincas ("layers") y/o capas físicas ("tiers"). A estos efectos, el servicio web equivale a lo que sería la capa de presentación en otro proyecto. Es decir, el servicio "presenta" una interfaz ante los programas que lo consumen, y luego ejecuta el código en una serie de clases que pueden ser tan complejas como se necesite y dividirse en las capas que sean oportunas para el servicio que se ofrece. Es perfectamente normal que la capa de "presentación" (que es la que implementa la interfaz) a su vez llame (por ejemplo) a una capa de negocio y esta a su vez a una capa de datos, y posiblemente que exista una capa de comunicación que enlace las tres anteriores, y puede que una capa de servicios invocada desde varias de ellas, si es que la complejidad del servicio es lo bastante grande para beneficiarse de este diseño.

    Por cierto, no necesariamente la interfaz y la clase del servicio se tienen que compilar juntas en la misma capa física. Es bastante común separar la interfaz a una DLL distinta, de forma que se pueda entregar a los desarroladores que hagan una capa cliente en la que no se genere el código directamente a partir del MEX, sin tener que darles el código ejecutable contenido en las clases, que se compila en otro ejecutable aparte y se deja únicamente en el servidor (mientras que la interfaz se duplica en el servidor y el cliente).

    • Marcado como respuesta RealMaster sábado, 12 de septiembre de 2015 19:11
    sábado, 12 de septiembre de 2015 15:30
  • Gracias por la Respuesta Alberto,

    entonces tendria diseñado de esta manera, la aplicacion:

    Capa de Servicios Web o Capa de Presentacion en este contexto ---> Interfaces con sus clases respectivas

    Capa de Acceso a Datos ---> Conexion a base de datos

    Capa de Negocios ---> Tareas extras luego de acceder a la capa de Acceso a Datos

    Tenia la duda que las clases que utilizare en el servicio web la cual se decora con el atributo [DataContract] y sus atributos se decoran con [DataMember] podria colocarlas en otra capa, si es asi tendria tambien:

    Capa de Entidades ---> Clases que utilizara el servicio web




    • Editado RealMaster sábado, 12 de septiembre de 2015 16:50
    sábado, 12 de septiembre de 2015 16:47
  • Las clases del [DataContract] son las que se comparten entre el servicio WCF y los llamantes del servicio. Si su contenido resulta ser el mismo que se transporta entre las capas del servicio, entoonces las mismas clases pueden usarse para las dos cosas. Es lo que yo en mi anterior respuesta llamé la "Capa de Comunicación" (porque contiene las clases que comunican datos entre capas), pero que tú has llamado "Capa de Entidades". Con independencia del nombre que le pongamos, la finalidad es la misma.
    • Marcado como respuesta RealMaster sábado, 12 de septiembre de 2015 19:11
    sábado, 12 de septiembre de 2015 17:25