Busqueda local

Loading

viernes, 28 de octubre de 2011

Ejemplo ASP.NET en capas (2 de 3)

Hasta este momento ya hemos creado la capa del Modelo de Dominio, y estamos listos para empezar la codificación de la capa intermedia; esta capa también llamada de Servicios, es la encargada de crear el vínculo de comunicación entre la capa a nivel de usuario y la capa de datos.
Su responsabilidad incluye todo aquello que se requiera para trasladar los datos en ambos sentidos, incluso las conversiones entre una vista y otra…

Importancia

Esta capa cumple con uno de los principales requisitos en este modelo de capas, mantener la independencia entre las partes; aislar las clases, para romper con la dependencia tan estrecha que existe en las aplicaciones codificadas usando ASP.
 

Continuación

Este tutorial es la continuación del anterior donde se creó la capa del Model.

Tutorial
1.- Para mantener ambas capas separadas físicamente, vamos a crear una nueva carpeta al mismo nivel que la del Model, a la cual llamaremos Servicios y Dentro de esta agregaremos otra llamada ViewModels:
aspnet2-1
2.- Agregaremos el primer View Model:
aspnet2-2
Observación: al ver el código podrán notar la pequeña diferencia con la entidad, se trata de la propiedad Precio de la entidad Producto, que en este caso se separo en dos propiedades.
En un artículo posterior les mostrare de qué forma podemos agregar propiedades nuevas para contener el porcentaje de descuento, y validar que la afectación será mínima.

Patrón Solicitud/Respuesta.
Al tratarse de una aplicación Web, es necesario tomar en cuenta que se recibirán solicitudes y se enviaran respuestas; estas solicitudes deben cumplir con un contrato especifico, así mismo las respuestas.
3.- Dentro de la carpeta Servicios, agregaremos dos carpetas más denominadas Solicitudes y Respuestas:
aspnet2-12
4.- Dentro de la carpeta de solicitudes agregaremos una clase para las solicitudes:
aspnet2-4
Observación: Las letras VM al final nos indican que se trata de un ViewModel.
5.- Dentro de la carpeta Respuestas agregaremos otra clase, para las respuestas:
aspnet2-5
Ya estamos listos para hacer la conversión de View Models en Entidades. Esta conversión mantiene separados los datos de la pagina y las entidades del Modelo.

Paso de la muerte
Podemos decir que esta es la parte crucial de esta capa, un paso en falso y todo fallara. Así que deben seguir con mucho cuidado las indicaciones; si tienen dudas, sigan los links que se agregan para completar la teoría.

6.- Nuevamente haremos uso de los métodos de extensión, que son mucho mas versátiles que agregar el código a la entidad; en esta ocasión vamos a necesitar dos:
  • El primero nos permite convertir una entidad producto a un view model de producto,
  • El segundo una lista genérica de Productos a una lista genérica de ProductoViewModel.
Se trata de una extensión de la entidad producto, así que agregaremos esta nueva clase en la carpeta Entities del Model:
aspnet2-6
Nota: Este Método de extensión recibe un Producto y lo convierte en ProductoViewModel.

7.- En el artículo anterior agregamos un método de extensión para aplicar el descuento; en esa misma (ProductoListExtension) vamos a agregar otro método nuevo, para poder agregar elementos:
aspnet2-7
8.- A continuación vamos a crear una clase Servicio que atenderá las solicitudes y generara las respuestas:
aspnet2-8
Nota: Todo lo que hemos creado se encuentra en memoria, aun no hemos creado un acceso al almacén de datos; para que el trabajo sea mucho mas rápido vamos a usar Clases de LINQ to SQL.

9.- Agregaremos un nuevo elemento de las plantillas de Data, dentro de la carpeta de Model, al cual llamaremos Entidades;
aspnet2-9
10.- En la base de datos de SQL crearemos una tabla, a la cual llamaremos Productos; desde la IDE de VS solo debemos abrir el panel de servidores, ubicar la tabla y después arrastrarla y soltarla en el diseñador de LINQ para obtener la clase.
aspnet2-10
Ojo: deben tener cuidado, el nombre de la tabla debe conservarse, de lo contrario se presentaran errores en las extensiones y las entidades.
.
10.- Abrimos la clase repositorio que habías creado en el artículo anterior y la modificamos como se muestra a continuación, para que emplee LINQ al realizar la consulta:
aspnet2-11
 
Ya solo falta un articulo para tener el modelo arquitectónico completo. En el próximo articulo podrán completar el ejemplo y ver como se ejecuta.

Fin de la capa de Servicios.

1 comentario:

  1. Saludos Jose. Muchas gracias por tu valioso aporte. De casualidad tienes la solucion completa para descargar. Nuevamente muchas gracias

    ResponderEliminar