Nivel intermedio

En esta sección se proporcionan información y orientación sobre el uso de servicios de dominio, código compartido y entidades de datos en el nivel intermedio de una aplicación de WCF RIA Services. En una aplicación de 3 niveles, el nivel intermedio contiene la lógica para administrar la interacción entre el nivel de presentación y la capa de datos. Se aplican reglas de negocios y comprobaciones de validación en el nivel intermedio para asegurarse de que los datos están en un estado aceptable. Por ejemplo, en una aplicación de recursos humanos, se puede proporcionar una interfaz de usuario que permita a los empleados enviar una solicitud de vacaciones, pero hay que asegurarse de que el saldo de vacaciones de un empleado nunca sea menor que cero. Por lo tanto, se ha de agregar lógica en el nivel intermedio para comprobar el saldo de vacaciones del empleado antes de enviar una solicitud de vacaciones.

Para crear la mejor experiencia de uso en un cliente de RIA Services , como una aplicación de Silverlight, es posible que desee aplicar en el cliente las mismas reglas de negocios que aplicaría en el servidor. Esto requiere que el código de nivel intermedio en el cliente y el código de nivel intermedio en el servidor estén sincronizados. RIA Services permite utilizar .NET Framework para escribir lógica de aplicación en el nivel intermedio. RIA Services genera automáticamente código para el nivel de presentación desde el código de nivel intermedio, de modo que dichos niveles estén siempre sincronizados. En este tema y sus temas subsidiarios se describe cómo utilizar servicios de dominio, código compartido y entidades de datos para generar el nivel intermedio.

Capa de acceso a datos

Puede trabajar con cualquier tipo de capa de acceso a datos cuando desarrolle el nivel intermedio utilizando RIA Services . Por ejemplo, puede conectarse con las siguientes capas de acceso a datos:

  • Entity Data Model.

  • Modelo de objetos de LINQ to SQL (esta opción solo es posible si está instalado el Kit de herramientas de RIA Services).

  • Objeto Common Language Runtime (CLR).

  • Servicio Web que expone datos de su origen.

Puede aplicar comprobaciones de validación al modelo de datos para exigir restricciones en los valores de datos enviados desde el nivel de presentación.

En algunos casos, es necesario interactuar con datos que existen en más de una tabla. RIA Services proporciona un marco de programación que admite la modificación de modelos de datos jerárquicos (como una relación Order y OrderDetails), modelos de datos de herencia (como una relación primaria y secundaria) y modelos de proyección de datos (como datos de desnormalización mediante la extracción de valores de las tablas Customer y Address en un modelo de datos único). Para obtener más información, vea Datos.

En la aplicación, puede que sea necesario mostrar datos de una variedad de orígenes de datos o exponer una entidad única a más de un servicio de dominio. WCF RIA Services habilita este escenario admitiendo referencias entre entidades de tipos DomainContext diferentes. Para obtener más información, vea Tutorial: compartir entidades entre varios servicios de dominio.

De forma predeterminada, RIA Services no pasa la entidad original completa junto con los valores modificados a la capa de acceso a datos para comprobar la simultaneidad de los datos. En su lugar, RIA Services almacena y devuelve solamente los miembros que están marcados con el atributo RoundtripOriginalAttribute, el atributo ConcurrencyCheck o el atributo TimeStamp. Para obtener más información, vea Datos.

Servicios de dominio

Un servicio de dominio es la abstracción pública de la lógica de negocios para un dominio. Incluye las entidades y operaciones que comprenden la lógica de negocios de dominio. RIA Services proporciona la clase DomainService como clase base para todas las clases que actúan como interfaz para la lógica de negocios en la capa de datos. Cuando se implementa un servicio de dominio, se especifican las clases de entidad que se desea exponer para el acceso desde el cliente. También se especifican las operaciones de datos que se permiten a través del servicio de dominio y se puede agregar lógica de aplicación al servicio de dominio. Para cada servicio de dominio que se habilita para el acceso de cliente, RIA Services generará una clase DomainContext para la aplicación cliente. Para obtener más información, vea Servicios de dominio.

Para obtener información sobre cómo proteger el servicio de dominio, vea Seguridad para WCF RIA Services.

Código compartido

En algunos escenarios, es necesario agregar código que se comparte entre el proyecto de nivel intermedio y el proyecto de nivel de presentación, pero es posible que no desee colocar ese código en el servicio de dominio o una clase de entidad. Por ejemplo, es posible que tenga que hacer referencia a una biblioteca que contiene lógica de aplicación, que se utiliza en muchos otros proyectos. O bien, puede que tenga que crear propiedades personalizadas que combinen o cambien valores de la clase de entidad, como un nombre para mostrar en el formato "apellido, primera letra del nombre". RIA Services permite incluir clases o ensamblados en el nivel intermedio cuyo acceso se pueda obtener sin cambios en el proyecto de cliente. Para obtener más información, vea el tema Código compartido.

Generación de código de cliente

Cuando se vincula un proyecto de nivel intermedio y un proyecto de nivel de presentación utilizando RIA Services , el marco de RIA Services genera automáticamente código para el cliente desde el nivel intermedio. El código de cliente se genera para el siguiente código de nivel intermedio:

  • Cada servicio de dominio anotado con el atributo EnableClientAccessAttribute.

  • Cada clase de entidad a la que hace referencia un servicio de dominio.

  • Los archivos de código cuyo nombre se asigna con la convención de nomenclatura compartida (*.shared.cs o *.shared.vb) se copian sin modificación en el proyecto de cliente.

El código de nivel intermedio está disponible para el cliente mediante clases de proxy de cliente. Cuando el código en el nivel intermedio cambia, las clases de proxy de cliente se vuelven a generar automáticamente para que el nivel de presentación esté siempre sincronizado con el nivel intermedio.

Para obtener más información, vea Generación de código de cliente.