Implementando Una Arquitectura en Capas

Escuela de Informática y Telecomunicaciones Programación .Net – ADO.Net Acceso a Datos Implementando una Arquitectura e

Views 110 Downloads 6 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Escuela de Informática y Telecomunicaciones

Programación .Net – ADO.Net Acceso a Datos Implementando una Arquitectura en Capas Actividades: Crear estructura de la Solución. ..................................................................................... 1 Crear Solución ............................................................................................................ 2 Agregar proyectos ...................................................................................................... 2 Creación de la Capa de Datos. ........................................................................................ 3 Generación del Modelo de Entidades ......................................................................... 3 Creación de la Capa de Presentación.............................................................................. 6 Creación de la Página Principal ................................................................................... 6 Creación de la Capa de Negocio. .................................................................................. 10 Creación de las Componentes de Negocio Base ........................................................ 10 Creación de las Componentes de Negocio ................................................................ 11 Creación de un proyecto de Pruebas Unitarias ............................................................. 14 Creación del Maestro de Bibliotecas ............................................................................ 15 Creación y enlace de la Colección de Negocio ........................................................... 15 Mantención de los registros de Biblioteca .................................................................... 20 Creación del Mantenedor ......................................................................................... 20 Creación de la página de estadísticas. .......................................................................... 23

Escuela de Informática y Telecomunicaciones

Crear estructura de la Solución. Esta actividad creará los elementos principales requeridos a nivel de aplicación y componentes. Cubriendo los elementos generales de las capas de Datos, Negocio y Presentación. Los objetivos generales perseguidos son: 1.

Construcción del EDM de soporte para la capa de datos del modelo de datos propuesto para este ejercicio

2.

Construcción de los componentes (clases) de negocio requeridos, para dar solución a los requerimientos de interfaz de usuario, y la forma de comunicarse al EDM generado para dar solución a estas necesidades.

3.

Generar la Aplicación Web que permite al usuario interactuar, para realizar las funcionalidades esperadas.

La solución debe ser capaz de resolver lo siguiente: 1.

Presentar un listado de todos los registros de la entidad que encontramos en la base de datos.

2.

Proveer una página de mantención de los registros de entidad que cubra: creación, consulta, actualización y eliminación de entidades.

3.

Resolver consultas estadísticas de las entidades generadas.

4.

Organizar la interfaz de usuario mediante un menú para el acceso a las 3 funcionalidades descritas

Base de Datos: Se requerirá de la base de datos Bibliotecas que se provee como script adjunto a esta guía.

Página 1

Escuela de Informática y Telecomunicaciones

Crear Solución Recuerde crear un directorio donde alojar la solución y no el entregado por defecto. a)

Desde el menú seleccionamos Archivo > Nuevo > Proyecto…

b) Desde la ventana Nuevo Proyecto, seleccione Otros tipos de Proyectos > Solución en Blanco: c)

El nombre de la solución es “Solucion en Capas”.

Agregar proyectos Cada uno de los proyectos a ser creados deben tener los nombres que reflejen su cometido, para ello se utilizarán: Bibliotecas.DALC, Bibliotecas.Negocio y WebBibliotecas. a)

Seleccionando la solución y desde el menú contextual, agregue una nueva Biblioteca de Clases C# de nombre Bibliotecas.DALC

b) Agregue una nueva Biblioteca de Clases C# de nombre Bibliotecas.Negocio c)

Agregue una nueva Aplicación web vacía de ASP.Net de nombre WebBibliotecas (proyecto de inicio)

d) Configure el Web Site creado, como proyecto de partida. Con estos pasos tenemos los componentes requeridos en cada capa, como arquitectura base.

Página 2

Escuela de Informática y Telecomunicaciones

Creación de la Capa de Datos. Generación del Modelo de Entidades a)

Nos situamos en el proyecto Bibliotecas.DALC y desde el menú contextual del proyecto agregamos un nuevo ítem del tipo ADO.Net Entity Data Model de nombre BibliotecasEDM, como lo indica la imagen:

b) Se iniciará el asistente de creación del modelo y en el primer paso debemos indicar que el modelo se generará a partir de una base de Datos:

Página 3

Escuela de Informática y Telecomunicaciones

c)

Luego debemos generar la conexión a la base de datos y darle un nombre para guardarla en el archivo de configuración de la aplicación:

d)

Posteriormente se deben seleccionar los objetos de la base de datos que serán incorporados al modelo de entidades, para el caso de esta actividad se deben seleccionar las tablas y procedimientos almacenados e ingresamos el nombre BibliotecasModel como espacio de nombres:

Página 4

Escuela de Informática y Telecomunicaciones

e)

Al finalizar el asistente se habrá creado el modelo en nuestra librería, desde donde referenciaremos las respectivas entidades y acciones asociadas:

f)

En la Vista de Clases, podremos ver las entidades que se han generado como producto del proceso:

g)

Con esto ya tenemos la estructura base de la Capa de Datos, posteriormente los requerimientos indicarán los ajustes al modelo.

Página 5

Escuela de Informática y Telecomunicaciones

Creación de la Capa de Presentación. Esta actividad agregará los elementos básicos de la Capa de Presentación, los cuales irán tomando vida a medida que se codifique la Capa de Negocio.

Creación de la Página Principal a)

Nos situamos en el sitio WebBibliotecas y agregamos una página Principal (Master Page), manteniendo el nombre por defecto MasterPage.master:

b) Ahora agregamos un Mapa del Sitio, manteniendo el nombre por defecto Web.sitemap:

Página 6

Escuela de Informática y Telecomunicaciones

c)

La estructura de navegación de la aplicación en base a los requerimientos, debiese reflejar lo siguiente:

d) Habiendo creado el Mapa del Sitio, podemos agregas los elementos de navegación en la página Principal. e)

En la página principal MasterPage.master cámbiese al modo código de la página y agregue 2 controles Panel de nombre “pnlMenu” y “pnlSiteMap”:

f)

Cambie al modo de diseño y en el panel del menú (pnlMenu) agregue un control SiteMapDataSource desde el grupo de controles de Datos de nombre smdsMenu:

Página 7

Escuela de Informática y Telecomunicaciones

g)

A continuación del SiteMapDataSource, agregue un control Menu desde el grupo de controles de Exploración, seleccione un Formato de Presentación y seleccione la fuente de datos del SiteMap creada en el paso anterior:

h) Dentro del panel de SiteMap (pnlSiteMap), agregue un control SiteMapPath desde el grupo de controles de Exploración, seleccione un Formato de Presentación ad-hoc:

i)

Con estos pasos ya se encuentra configurada la página Principal y los menús de navegación.

Página 8

Escuela de Informática y Telecomunicaciones

Creación de las páginas adicionales: a) En el sitio WebBibliotecas agregamos un Formulario Web ó Página Web de nombre Inicio.aspx, la cual debe basarse en la Página Principal “MasterPage.master”: b) Agregue las siguientes páginas basadas en la Página Principal: Maestro.aspx, Mantenedor.aspx y Estadistica.aspx. Recuerde que estos nombres están referenciados en el Mapa del Sitio, por lo cual deben estar sincronizados. c)

Configure la aplicación Web como proyecto de partida y la página Incio.aspx como página de inicio.

d) Ejecute la aplicación y valide la navegación con el menú.

Página 9

Escuela de Informática y Telecomunicaciones

Creación de la Capa de Negocio. Creación de las Componentes de Negocio Base h) Nos situamos en el proyecto Bibliotecas.Negocio y agregaremos una clase de nombre CommonBC:

i)

De esta clase heredarán las clases de negocio para acceder a una instancia única del Modelo, de manera que el contexto sea compartido por las distintas entidades del EDM. Como accedemos al modelo se debe agregar la respectiva referencia al proyecto Bibliotecas.DALC e incluir la referencia al System.Data.Entities

j)

Para que la clase provea de este acceso compartido, NO deberá depender de una instancia particular, por lo tanto hacemos la construcción de manera estática:

Página 10

Escuela de Informática y Telecomunicaciones

Creación de las Componentes de Negocio Ya tenemos parte de los elementos bases, por lo tanto podemos iniciar la construcción de las clases de negocio formales: a)

Agregamos una nueva clase de nombre Biblioteca:

b) Esta clase deberá ser pública para su acceso desde la capa de presentación:

c)

Como se muestra en el diagrama, será necesario agregar las propiedades que permitan recibir los valores para ser luego mapeados con las propiedades de la instancia de la Entidad del EDM y el constructor por defecto con la inicialización de estas propiedades.

d) Agregue un método Create() con retorno bool, en el cual accedemos a la instancia del modelo que nos provee la clase base CommonBC, para la creación de una nueva entidad. Asignamos los valores de nuestras propiedades a la entidad y hacemos el llamado directo para agregar la nueva instancia y guardar los cambios:

Página 11

Escuela de Informática y Telecomunicaciones

e)

Para leer los valores de una entidad creamos el método Read() y debemos acceder a la entidad mediante la llave única del modelo de datos (PK – Primary Key). Luego traspasamos los valores de la entidad a nuestras propiedades:

Página 12

Escuela de Informática y Telecomunicaciones

f)

Para actualiza una entidad existente creamos el método Update(), también accedemos a la entidad mediante la llave única del modelo de datos, traspasamos los valores y guardamos los cambios:

g)

Finalmente para eliminar una entidad creamos el método Delete(), nuevamente hacemos uso de la llave única para identificar y solicitar la eliminación de la entidad:

Página 13

Escuela de Informática y Telecomunicaciones

Creación de un proyecto de Pruebas Unitarias Como a estas alturas la interfaz de usuario que se construirá en la Capa de Presentación, dista mucho de estar en condiciones de ser codificada, es recomendable la construcción de una pequeña aplicación que nos permita validar el funcionamiento de las componentes. a)

Agregamos un proyecto de Consola de nombre PruebasUnitarias:

b) En este proyecto debemos agregar las referencias a la librería System.Data.Entities c)

Bibliotecas.Negocio y

Como este proyecto será la aplicación cliente para las pruebas, es requerido incluir aquí un archivo de configuración, para registrar el ConnectionString del EDM, este lo podemos agregar de forma manual o simplemente copiar el archivo App.config del proyecto “Bibliotecas.DALC”:

d) Cree un método para cada una de las acciones codificadas para el CRUD. e)

Deberemos definir este, como proyecto de partida.

f)

Ejecute la aplicación y valide el funcionamiento esperado.

Página 14

Escuela de Informática y Telecomunicaciones

Creación del Maestro de Bibliotecas Creación y enlace de la Colección de Negocio Principalmente la colección de negocio nos dará acceso a las funcionalidades grupales, accediendo para ello al modelo de entidades y resolviendo las consultas grupales para las estadísticas. a)

Nos situamos en el proyecto Bibliotecas.Negocio y agregaremos una clase de nombre BibliotecaCollection:

b) Lo primero que debemos proveer es un método para retornar el listado completo de empresas, pero este debe ser del tipo List, ya que a pesar que podemos acceder directo a una lista del EDM, este no puede ser conocido por la Capa de Presentación. Por lo tanto los primero que crearemos será un método privado para generar una lista de negocio en base a una lista de entidades EDM, este método lo podemos utilizar cada vez que necesitamos hacer esta transformación. c)

Agregamos a la colección un método privado de nombre GenerarListado(), el cual recibe una lista Bibliotecas.DALC.Biblioteca y la transforma en una lista de Empresas.Negocio.Empresa:

Página 15

Escuela de Informática y Telecomunicaciones

d) Teniendo la utilidad del método anterior podemos convertir cada lista del EDM (de más fácil consulta) a una lista que puede ser enviada a la Capa de Presentación. Agregamos entonces el primer método para proveer de registros al GridView de nombre ReadAll() el cual retorna la lista completa de entidades:

e)

Con este método podemos poblar nuestro GridView, por lo tanto vamos a la página Maestro.aspx y agregamos un control panel y en su interior un GridView de nombre gvBibliotecas. Debemos agregar la referencia hacia la componente de negocio desde nuestro sitio web, para poder utilizar la clase y método creado. Como el sitio web dará el contexto de ejecución, debemos asegurarnos que en el archivo web.config, se encuentre la información de conexión a la base de datos.

f)

Para aprovechar la capacidad de enlace con los controles que son fuentes de datos, haremos uso parcial (como ayuda) de un control ObjectDataSource, por lo tanto agregamos uno a la página. Desde las tareas del ObjectDataSource, seleccionamos la opción Configurar Fuente de Datos… y desde la lista de objetos de negocio que se nos presenta, debemos seleccionar Bibliotecas.Negocio.BibliotecaCollection y avanzamos a la siguiente pantalla.

g)

En la lista seleccionamos el método ReadAll() y damos por finalizada la configuración:

Página 16

Escuela de Informática y Telecomunicaciones

h) En el control GridView seleccionamos un formato ad-hoc y luego escogemos la fuente de datos creada, para que se auto-configure y de esta forma nos evitamos crear manualmente cada columna.

i)

Luego de obtener la construcción de la columnas, quitamos el enlace creado borrando el valor de la propiedad DataSourceID y respondiendo NO a la consulta de refresco de campos:

Página 17

Escuela de Informática y Telecomunicaciones

j)

Como más adelante se requiere rescatar el valor del campo llave (PK), debemos agregarlo en la propiedad DataKeyNames del GridView:

k)

Como ya utilizamos el ObjectDataSource en la definición de columnas, ahora lo debemos eliminar de la página.

l)

Para habilitar la paginación configuramos el valor de la propiedad AllowPaging en true.

m) En el evento Load de la página se enlazará la colección con el GridView:

Página 18

Escuela de Informática y Telecomunicaciones

n) La paginación de la colección no puede ser ejecutada de manera automática, ya que hemos asignado la fuente de datos de manera “manual”, por lo tanto debemos hacernos cargo del cambio entre páginas de la información. Pero esto es una tarea sencilla que debemos programar en el evento PageIndexChanging:

o) Con esto ya tenemos las funciones generales del GridView para poder desplegar la información.

Página 19

Escuela de Informática y Telecomunicaciones

Mantención de los registros de Biblioteca En los requerimientos definidos para el maestro de bibliotecas debemos hacernos cargo de la creación, consulta, edición y eliminación de entidades, para ello vamos a recurrir a los métodos generados en la clase de negocio Bibliotecas.Negocio.Biblioteca:

Creación del Mantenedor En la página Mantenedor.aspx, debemos agregar los controles de interfaz que nos permitan ejecutar las operaciones definidas: a)

Nos situamos en la página Mantenedor.aspx y agregamos los siguientes controles: Tipo TextBox TextBox CheckBox TextBox TextBox Button Button Button Button Label

Nombre txtId txtNombre chkPublica txtInauguracion txtLibros btnConsultar btnCrear btnActualizar btnEliminar lblMensaje

Función Captura el Id de la biblioteca Captura el Nombre de la biblioteca Captura el tipo público de la biblioteca Captura la fecha de Inauguración de la biblioteca Captura la cantidad de Libros de la biblioteca Lee y carga los datos de la biblioteca en base al Id Crea un nuevo de registro de biblioteca Graba los cambios en los datos de la biblioteca Elimina un registro de biblioteca en base al Id Informa el resultado de las operaciones de los botones.

b) Programamos el evento Clic del botón Consultar, este hará uso del evento Read() de la clase de negocio, para poblar los datos si el Id ingresado existe:

c)

El evento hace uso de un método para limpiar los datos ante errores de nombre LimpiarControles(), este debe ser agregado a la página con el siguiente código de referencia:

Página 20

Escuela de Informática y Telecomunicaciones

d) Programamos el evento Clic del botón Crear, este hará uso del evento Create() de la clase de negocio, para crear la nueva entidad si el Id ingresado NO existe:

e)

Programamos el evento Clic del botón Actualizar, este hará uso del evento Update() de la clase de negocio, para modificar los datos si el Id ingresado existe:

Página 21

Escuela de Informática y Telecomunicaciones

f)

Programamos el evento Clic del botón Eliminar, este hará uso del evento Delete() de la clase de negocio, para eliminar la entidad si el Id ingresado existe:

Página 22

Escuela de Informática y Telecomunicaciones

Creación de la página de estadísticas. Esta página interactúa principalmente con la colección de bibliotecas, en donde incorporaremos los métodos requeridos. Veremos como LINQ to Entities, nos facilita la forma de realizar las consultas que son solicitadas en el requerimiento: a)

En la página de Estadistica.aspx, agregaremos una tabla y los controles respectivos para realizar las consultas y desplegar los resultados (Botones y Textbox). Las consulta resolver serán: • • • • • •

Número de bibliotecas públicas y privadas. Número de bibliotecas inauguradas en 2013. Número Total de Libros en las bibliotecas. Promedio de Libros en las bibliotecas. Nombre de la biblioteca con más y con menos libros. Número de bibliotecas en un rango de libros.

b) Para la consulta de públicas y privadas, necesitamos incorporar un método que discrimine esta cantidad por tipo:

c)

En la consulta de la inauguración por año se debe incluir un método que tome esta parte de la propiedad Inauguracion:

d) Para el total de libros haremos uso de la función agregada Sum():

Página 23

Escuela de Informática y Telecomunicaciones

e)

El promedio de libros hará uso de la función agregada Average():

f)

Los nombres de las bibliotecas con más y menos libros se implementarán en métodos diferentes, ya que la naturaleza de la consulta es similar pero el resultado es distinto:

g)

Para el rango incorporamos un nuevo método que aplique este filtro en la misma consulta:

h) Con los métodos creados, solo restaría llamarlos desde la interfaz de la página, para presentar los resultados.

Página 24