Uso de RIA Services desde ASP.NET MVC

En las aplicaciones web tradicionales las diferentes capas lógicas (lógica de presentación, lógica de negocio, acceso a datos..) se distribuyen generalmente en dos capas físicas que se encuentran en el servidor. La lógica de presentación y de negocio suelen estar dentro de la misma capa, por lo que la comunicación entre ambas no supone ninguna complejidad.

web traditional 

El hecho de implementar una aplicación RIA supone desplazar una de dichas capas lógicas, en concreto, la capa de presentación a la parte cliente. Esto, además de convertirlo en un “cliente pesado”, complica las comunicaciones entre la lógica de presentación y la lógica de negocio.

ria app 

Para solucionar este problema aparecen los RIA Services. El objetivo de los RIA Services es simplificar el desarrollo de aplicaciones RIA, para que podamos desarrollar aplicaciones de este tipo como si fuesen aplicaciones web tradicionales. Estos servicios  trabajan en las capas intermedias ofreciendo control de acceso, cambios y operaciones definidas por el usuario, así como funciones de de validaciones, autentificación de usuarios y roles en las capas superiores.

ria services 

Con estos servicios aparece un nuevo DataSource llamado  DomainDataSource que nos va a permitir trabajar de una manera bastante cómoda y sencilla contra servicios de dominio que se exponen con RIA Services.

ria 

Después de esta pequeña explicación teórica (ver más) vamos a ver dichos servicios en acción 😉

En un artículo anterior vimos como utilizar los RIA Services para implementar una aplicación ASP.NET MVC cuyo cliente estaba basado en tecnología Silverlight. En este caso vamos a ver como podemos utilizar este tipo de servicios desde una aplicación basada completamente en ASP.NET MVC.

Para ello creamos una aplicación de tipo ASP.NET MVC 2 Web Application llamada RiaServices. A continuación, creamos la base de datos que se llamará UserDB.mdf, y en la que añadimos una tabla llamada Users que tendrá los siguientes campos:

image 

A continuación creamos el modelo de datos con el que vamos a trabajar, y a través del cual interactuaremos mediante el uso de RIA Services. Para ello dentro de la carpeta Models, hacemos clic con el botón derecho y añadimos un elemento de tipo ADO.NET Entity Model Data que llamaremos UserModel.edmx, y que estará basado en la base de datos creada inicialmente.

image 

Por último añadimos un servicio de dominio a nuestra aplicación, que es el que nos va a permitir comunicar de manera sencilla la lógica de presentación y la lógica de negocio. Para ello utilizaremos un elemento de tipo DomainService al que llamaremos UserService

image image

Una vez definido el servicio, vamos a pasar a implementarlo dentro de la aplicación para extraer información de nuestro modelo de datos. Para ello:

Dentro del controlador HomeController:

· Añadimos la referencia a nuestro modelo

  1. using RiaServices.Models;

· Inicializamos el servicio creado, y añadimos una lista de usuarios que más adelante rellenaremos con los valores extraídos mediante el servicio:

  1. UserService service = new UserService();
  2.         IQueryable<Users> usuarios;

· Añadimos un resultado de acción llamado List(), que se encargará de lanzar el servicio y obtener los datos de los usuarios a partir del mismo:

  1. public ActionResult List()
  2.         {
  3.             usuarios = service.GetUsers();
  4.             return View(usuarios);
  5.         }

Implementamos su correspondiente vista:

image 

Cuyo código será el siguiente:

  1. <h2>List</h2>
  2.     <% foreach (var item in Model)
  3.        { %>
  4.            <%=Html.ActionLink(item.UserName,"Details", new {id = item.UserID} )%>
  5.            Phone: <%=Html.Encode(item.UserPhone) %><br />
  6.     <% } %>

*Es necesario modificar el atributo Inherits, y poner:

  1. System.Web.Mvc.ViewPage<IQueryable<RiaServices.Models.Users>>

A continuación configuramos el resultado de acción Details, que nos mostrará los detalles del elemento seleccionado. Para ello implementamos uno de los métodos que se encuentra definido dentro del servicio Usersservice, y que  nos permite obtener todos los usuarios definidos en nuestro modelo de datos.

  1. public ActionResult Details(int id)
  2.         {
  3.             usuarios= service.GetUsers();
  4.             var usuario = (from t in usuarios
  5.                            where id == t.UserID
  6.                            select t).FirstOrDefault();
  7.             return View (usuario);
  8.  
  9.         }

Implementamos su correspondiente vista:

image 

Cuyo código será el siguiente:

  1. <h2>Details</h2>
  2.  
  3.     <fieldset>
  4.         <legend>Fields</legend>
  5.         
  6.         <div class="display-label"><b>UserID</b></div>
  7.         <div class="display-field"><%: Model.UserID %></div>
  8.         
  9.         <div class="display-label"><b>UserName</b></div>
  10.         <div class="display-field"><%: Model.UserName %></div>
  11.         
  12.         <div class="display-label"><b>UserAge</b></div>
  13.         <div class="display-field"><%: Model.UserAge %></div>
  14.         
  15.         <div class="display-label"><b>UserPhone</b></div>
  16.         <div class="display-field"><%: Model.UserPhone %></div>
  17.         
  18.     </fieldset>
  19.     <p>
  20.  
  21.         <%: Html.ActionLink("Edit", "Edit", new { id=Model.UserID }) %> |
  22.         <%: Html.ActionLink("Back to List", "Index") %>
  23.     </p>

Si ejecutamos nuestra aplicación y navegamos hasta la dirección http://[localhost]/Home/List accedemos a una vista en la que se muestra nuestra lista de usuarios. Y si pinchamos en cualquiera de ellos podemos acceder a sus detalles.

image image

Además podemos implementar el resto de acciones (CRUD) sobre nuestro DomainDataSource, implementando los distintos métodos con los que contamos dentro de nuestro servicio UserService como: InsertUser, UpdateUser, DeleteUser…¡¡¡Que intentaremos ver más adelante!!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *