Compartir a través de


Desarrollo con Silverlight: cree sus aplicaciones empresariales en Silverlight

Silverlight ha madurado en una plataforma sólida para desarrollar e implementar aplicaciones de línea de negocio.

Gill Cleeren y Kevin Dockx

Sólo han pasado tres cortos años desde que Microsoft introdujo Silverlight en el mundo. Fue en Mix07 en Las Vegas donde todos vimos Silverlight, la nueva plataforma de aplicación de Internet enriquecida (RIA) de Microsoft en su primera versión. Hoy, Silverlight ha madurado en una plataforma lista para crear y mantener aplicaciones empresariales.

Silverlight 1.0 tenía un modelo de programación basado en XAML y JavaScript. Esta última no es ideal para crear aplicaciones empresariales. Por consiguiente, esa primera versión se usó principalmente en escenarios centrados en medios. Cuando se lanzó Silverlight 2, esta plataforma se transformó en un excelente candidato para desarrollar aplicaciones de línea de negocio (LOB). El cambio más importante fue la capacidad de codificar en .NET (C# o VB.NET) en lugar de JavaScript.

Para “probar” las capacidades y la idoneidad de Silverlight para crear aplicaciones de LOB, confeccionamos una corta lista de compras de requisitos típicos de aplicaciones empresariales. Veremos si Silverlight puede cumplir con estos requisitos.

Datos, datos, datos

¿En qué se piensa cuando se consideran aplicaciones empresariales? Lo principal son los datos. Las aplicaciones de Silverlight se ejecutan del lado del cliente, dentro del explorador. Los datos, sin embargo, residen en una base de datos del lado del servidor. Al observar los espacios de nombres y los ensamblados de Silverlight, se ve que no admite ADO.NET, por lo que no admite características ampliamente conocidas, tales como DataReaders o LINQ-To-SQL.

Silverlight tampoco tiene base de datos del lado del cliente. En muchos casos, ésta tampoco sería una solución. Y es que, desde luego, no sería conveniente guardar sin darse cuenta una copia temporal de una base de datos con información confidencial en la máquina de un cliente.

La solución es sencilla: agregar una capa de servicio encima de la base de datos. Esta capa de servicio se puede usar para conectarse con la base de datos, de preferencia a través de una capa empresarial. Del lado del cliente, Silverlight puede entonces conectarse con estos servicios y tener acceso a los datos (consulte la Figura 1).

Figure 1 Silverlight can connect to services on the client side

Figura 1 Silverlight puede conectarse con servicios del lado del cliente.

Silverlight admite tipos de servicios ASMX, WCF y REST. Silverlight también se puede usar para consumir tipos de servicios más exóticos, como sockets y net.tcp. Esto es una buena noticia si va a agregar Silverlight a una pila de tecnología existente dentro de su empresa. Los servicios de los cuales Silverlight puede obtener sus datos son los mismos que se usarían para otros tipos de aplicaciones.

El trabajo con los servicios ASMX y WCF es similar, desde el punto de vista de Silverlight. WCF debe ser su opción predeterminada si va a implementar el servicio. Observemos un ejemplo básico de conexión con un servicio WCF. El primer paso es definir lo que hace el servicio. Este servicio entrega una lista de productos:

[ServiceContract(Namespace = "")]
publicclassOrderService
{
[OperationContract]
publicList<Product> GetAllProducts()
        {
...
        }
    }

Una vez que el servicio está listo, podemos establecer la conexión con Silverlight. Para esto, agregue una referencia de servicio de Visual Studio (consulte la Figura 2).

Figure 2 Use Visual Studio to add a service reference to Silverlight

Figura 2 Use Visual Studio para agregar una referencia de servicio a Silverlight.

Visual Studio ahora creará una clase proxy para nosotros. Puede considerar a la clase Proxy como una copia del lado del cliente de la clase de servicios, donde las implementaciones de método se reemplazan por una llamada al método de servicio. Toda la comunicación del servicio en Silverlight ocurre de manera asincrónica. En el siguiente ejemplo de código, usamos este proxy para obtener una lista de productos:

privatevoid button1_Click(object sender, RoutedEventArgs e)
{
OrderService.OrderServiceClient proxy = new OrderService.OrderServiceClient();
       proxy.GetAllProductsCompleted += newEventHandler<OrderService.GetAllProductsCompletedEventArgs>(proxy_GetAllProductsCompleted);
       proxy.GetAllProductsAsync();
}

void proxy_GetAllProductsCompleted(object sender, OrderService.GetAllProductsCompletedEventArgs e)
{
ProductGrid.ItemsSource = e.Result;
}

REST es actualmente un protocolo popular, debido a su difundida adopción en API web 2.0 como Facebook y Twitter. Silverlight lo admite también plenamente. Silverlight también tiene un marco de servicio específico desarrollado considerando aplicaciones de n niveles de Silverlight: servicios WCF RIA.

Ingrese a n niveles

Al crear una aplicación de Silverlight, los datos por lo general se obtienen a través de una capa de servicio. Sin embargo, no existe una manera fuera de lo ordinario para simplemente escribir los objetos y clases de transferencia de datos, incluidas la validación, autenticación y autorización, de una sola vez. Las aplicaciones de Silverlight están creadas sobre una versión limitada de Microsoft .NET Framework 4. Por lo tanto, no se puede hacer referencia a un ensamblado (por ejemplo, uno que contenga su lógica de clases o validación) creado sobre .NET Framework 4 completo en una aplicación de Silverlight.

Es aquí donde intervienen los servicios WCF RIA. Éstos fueron creados para simplificar el desarrollo de RIA de LOB. Abordan la complejidad de la creación de aplicaciones de n niveles, ofreciendo un marco, controles y servicios del lado del servidor y del lado del cliente.

Permiten escribir servicios vinculados a un almacén de datos del lado del servidor. Éste puede ser una base de datos de SQL Server, sus propias clases POCO o un modelo de entidades. Los servicios WCF RIA, a continuación, regeneran estas entidades en su cliente. Junto con esto, generan el contexto, los métodos y las operaciones necesarios en el cliente para hablar fácilmente con sus servicios.

Si está familiarizado con Entity Framework, se sentirá como en casa. Realmente permiten codificar de manera similar. Por ejemplo, puede tener DomainContext del lado del cliente, que hace seguimiento de conjuntos de cambios, contiene listas de entidades y permite enviar estos cambios. Esto “oculta” el hecho de que se está trabajando a través de una capa de servicio.

Los servicios WCF RIA son esencialmente una tecnología del lado del servidor que proyecta código hacia un cliente. También simplifica la adición de validación y autorización o autenticación a sus servicios y entidades. Reduce ampliamente el tiempo de desarrollo que deberá invertir en la creación de aplicaciones de Silverlight de LOB.

Problemas de control

Silverlight posee un amplio conjunto de controles, que contiene controles simples como Buttons, TextBoxes y ComboBoxes. También posee muchos controles avanzados más, como DataGrid, RichTextBox y MediaElement en el paquete de instalación predeterminado. Con cada nueva versión, Microsoft agrega más controles.

Microsoft también ha creado el kit de herramientas de control de Silverlight. Éste es un conjunto de controles adicionales, que son de código abierto y están disponibles gratuitamente a través de CodePlex.com. Este paquete se actualiza regularmente y en forma extraordinaria con las versiones regulares de Silverlight.

Incluye muchos controles que puedan facilitar aun más su vida como desarrollador empresarial de Silverlight. También existen controles de gráficos, que puedan ser útiles para nuestro siguiente requisito: los informes.

Posibilidades de impresión

La impresión continúa siendo un requisito empresarial solicitado a menudo. Ahora con Silverlight 4, puede imprimir directamente desde Silverlight. Esta API permite indicar lo que se desea imprimir, ya sea la pantalla completa o contenido generado en forma dinámica, como un informe. Por lo tanto, es muy fácil crear una solución de informes en Silverlight 4, en combinación con los controles disponibles del kit de herramientas, como gráficos enriquecidos.

Patrones y procedimientos recomendados

Al trabajar con Silverlight o con aplicaciones basadas en XAML, algo importante que se debe considerar es la forma en que se debe escribir código, de manera diferente de como estamos acostumbrados a codificar en tecnologías más antiguas, como ASP.NET o Windows Forms. Es posible escribir código de la misma manera, pero no se debe hacer. De lo contrario, no se estaría usando la plena capacidad de la tecnología.

Las aplicaciones de Silverlight deben basarse principalmente en DataContext, enlace de datos y el patrón Observer. No debe haber código repetitivo para asignar valores de TextBox a objetos ni viceversa. Mientras más código de ese tipo deba escribir, más probabilidades tiene de introducir un error en el código. Se enlaza un objeto a elementos de UI, y los valores correctos quedan disponibles automáticamente a través del objeto en el código. En realidad, nunca debe tener acceso a elementos de UI directamente.

Aquí es donde interviene el patrón de diseño Model-View-ViewModel (MVVM). Esto a menudo se usa para instar a la separación de inquietudes (el código subyacente contiene poco o ningún código). Permite trabajar en la UI de la aplicación en forma separada del desarrollador. También permite una mejor capacidad de prueba del código.

Sin embargo, la ventaja más importante que ofrece es instar a los desarrolladores a aprovechar la capacidad de la tecnología de DataContext y enlace de datos. View tiene ViewModel como DataContext, que contiene todas las propiedades de datos.

Estas propiedades están destinadas a los elementos de UI de View a través de enlace de datos. De manera que ViewModel, esencialmente, convierte los datos que obtiene de Model (una representación de objetos de sus datos) en datos que View puede usar. Se puede considerar a ViewModel como un “convertidor con esteroides”.

Una vez instalado esto, necesitará una manera de retrasmitir sus eventos (como un clic de Button) a ViewModel, en lugar del código subyacente de Views. Esto se puede hacer a través de comandos. Silverlight ofrece una interfaz de ICommand, y es posible enlazar la base de botón que hereda elementos de UI con Commands. Estos comandos se definen en ViewModel.

A continuación, necesitará una forma de comunicarse entre diferentes ViewModels, sin que se hagan referencia entre sí. Esto se puede lograr a través del principio de difusión/escucha. Los suscriptores de ViewModel reciben un cierto tipo de mensaje, mientras que otro ViewModel envía otro mensaje. Puede tomar las medidas necesarias una vez que reciba el mensaje.

Por último, deberá asegurarse de que View sepa cuál debe ser su DataContext. Existen diferentes enfoques: el primer enfoque de View (la aplicación inicia View y es responsable de iniciar el ViewModel que necesita) o el primer enfoque de ViewModel (al revés). Éstos a menudo usan un contenedor de IoC o Managed Extensibility Framework (MEF) para reproducir responsabilidades.

Existen muy pocas implementaciones de MVVM. Usted puede escribir la suya, pero en la comunidad de código abierto ya existen muchas excelentes implementaciones disponibles, como MVVM Light Toolkit, Caliburn o Prism.

Como puede ver, Silverlight está listo para crear aplicaciones de nivel empresarial. De hecho, usted y yo lo hacemos diariamente.

Gill Cleeren

Gill Cleeren* es director regional de Microsoft (theregion.com), MVP ASP.NET, miembro de la oficina de identificación de oradores de INETA y tiene acceso a información privilegiada de Silverlight. Vive en Bélgica, donde trabaja como arquitecto de .NET en Ordina. También es el autor de muchos artículos en diversas revistas para desarrolladores, y recientemente publicó su primer libro, “Silverlight 4 Data and Services Cookbook” (Packt Publishing, 2010). Puede buscar su blog en snowball.be.*

 

Kevin Dockx

Kevin Dockxes un especialista técnico/líder de proyectos de aplicaciones web de .NET para RealDolmen, una de las compañías de ICT más grandes de Bélgica. Su principal interés reside en todas las cosas Silverlight, pero sigue atento a los nuevos desarrollos respecto de otros productos de la pila de Microsoft .NET (web). Es orador frecuente en diversos eventos nacionales e internacionales, como Microsoft DevDays en Países Bajos, Microsoft Techdays en Portugal o en eventos de BESUG (el grupo de usuarios de Silverlight de Bélgica). Su blog, que contiene diversa información sobre Silverlight, .NET y los recovecos ocasionales, se puede encontrar en blog.kevindockx.com.

 

Contenido relacionado