Busqueda local

Loading

jueves, 27 de octubre de 2011

Ejemplo ASP.NET en capas (1 de 3)

Para poder entender algo tan abstracto y nuevo, será necesario que llevemos a cabo la creación de un ejemplo donde podamos ver de qué manera los patrones afectaran la estructura de nuestro proyecto.
El ejemplo es simple, pero que nos permite ver como se crean las capas…

Introducción

Este articulo es la continuación del denominado ASP.NET sobre capas, los términos y la teoría que aquí se ejemplifican están en él; en esta ocasión me limitare a explicar cómo se crea la estructura de un proyecto usando esas capas y ampliare lo que no haya mencionado en el articulo antes citado. Los links les llevaran a profundizar en los temas que se mencionan.
Forma parte de una serie de 3 artículos que explicaran la implementación de este modelo de capas en su totalidad.
 

Tutorial

1.- Crearemos una nueva aplicación ASP.NET WEB, puede ser con VB o con C#.
ejemploaspnet1
Nota: En este punto debo hacer una observación, en el artículo anterior dije que en el flujo de codificación de las aplicaciones modernas se debe empezar por las clases, así que en este ejemplo vamos a empezar por crear las clases del Model.
2.- Hagan clic con el botón derecho sobre el proyecto y agreguen una carpeta nueva a la cual denominaran Model.
3.- Dentro de esta nueva carpeta vamos a agregar otra que llamaremos Interfaces.
4.- Ahora agregaremos dos capetas mas, una para almacenar las entidades, que debe llamarse Entities y otra llamada Custom, que contendrá las clases de apoyo.
ejemploaspnet4
Nota: Para nuestro proyecto vamos a usar el patrón Strategy, que se ejemplifica en el artículo del patrón Builder. El cual es muy útil para permitirle a l código adaptarse a situaciones desconocidas en el futuro, como podría ser el caso del mecanismo de descuentos que ofrece nuestra aplicación.
5.- Este patrón como casi todos empieza con una interface, la cual debe quedar en la carpeta Interfaces:
ejemploaspnet5
6.- Ahora vamos a crear una clase que implementa esta interface, dentro de la carpeta Custom:
ejemploaspnet6
7.- Para prevenir errores por valores nulos se recomienda el empleo del patrón de Objetos Nulos, como se muestra a continuación; creada dentro de la carpeta Custom:
ejemploaspnet7
8.- Nuestra entidad principal debe contener una propiedad para almacenar el precio de venta, que puede ser modificado usando la estrategia de descuentos; por lo tanto crearemos una clase que se empleará como tipo de esa propiedad, para que podamos tener el control de nuestra estrategia:
ejemploaspnet8
Observación: Si prestan atención al método ObtenerDescuento, podrán detectar la regla de negocio que impide la aplicación de un descuento que ocasione que vendamos a menor precio del costo.
9.- En este momento podemos crear la clase Producto:
ejemploaspnet9
10.- Para controlar la aplicación del descuento será necesario ligarlo de tal forma que nos permita, que dicha interacción sea automática, por ejemplo el tipo de cliente. Para lo cual agregaremos una nueva carpeta dentro de la carpeta Model, a la cual le pondremos por nombre Enums.
ejemploaspnet10
ejemploaspnet11
11.- Para terminar con la implementación de este patrón necesitaremos una clase Factory, que tendrá la responsabilidad de crear el objeto descuento que corresponda:
ejemploaspnet12
12.- En este punto vamos a preparar nuestra capa para acceder al almacén de datos, para lo cual vamos a emplear el patrón Repository. Empezaremos con una interface, para continuar con la separación de las partes.
ejemploaspnet13
Observación: conforme avancemos agregaremos mas métodos a la interface, por el momento solo usaremos uno.
13.- Antes de crear el repositorio de productos, vamos a agregar una nueva carpeta llamada Repositories dentro de Model, después agregaremos esta clase:
ejemploaspnet14
Observación: Este código tiene una excepción, si me han seguido con cuidado, se habrán dado cuenta que al momento de obtener los productos estamos omitiendo el mecanismo de descuentos que creamos al principio. Ese mecanismo se aplica a un producto, y en este caso estamos tratando con una lista, por lo que será necesario extender la funcionalidad, con un método de extensión.
14.- Creamos nuestro método de extensión dentro de la carpeta Entities:
ejemploaspnet15
15.- Luego modificamos el método GetAllfor de la clase ProductosRepository:
ejemploaspnet16
De esta forma al solicitar los productos se aplicara la estrategia de descuento que le corresponde al cliente.
Comentario Final: Esta última clase repositorio se modificara en el siguiente articulo cuando se cree el acceso a datos.
Fin de la primera parte.

No hay comentarios:

Publicar un comentario