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#.
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.
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:
6.- Ahora vamos a crear una clase que implementa esta interface, dentro de la carpeta Custom:
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:
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:
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:
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.
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:
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.
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:
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:
15.- Luego modificamos el método GetAllfor de la clase ProductosRepository:
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