Documente Academic
Documente Profesional
Documente Cultură
NET
CONTENIDO
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Arquitectura multi capas Pag 2 Arquitectura de tres capas Pag 2 Que contiene cada capa? . Pag 3 Uso en el desarrollo web. Pag 4 Como realizar una aplicacin en tres capas utilizando Visual Studio 2010? . Pag 4 Relacionando una base de datos a nuestro proyecto Pag 6 Construyendo la capa de acceso a datos Pag 10 Construyendo la capa de lgica de negocios Pag 16 Contruyendo la capa de presentacin. Pag 21 Que aprendimos? Pag 30
3.2.
Tambin conocida como capa de aplicacin, capa de negocios, capa lgica, o capa media; Es la capa que controla la funcionalidad de la aplicacin mediante procesamiento detallado de acuerdo a los requisitos otorgados por la capa de presentacin.
3.3.
Esta capa consiste de servidores de bases de datos. Aqu la informacin es almacenada y recibida. Mantiene a los datos de una manera neutral e independiente a la capa de presentacin y/o la capa de negocios.
5. Como realizar una aplicacin en tres capas utilizando Visual Studio 2010?
Utilizaremos 4 proyectos para nuestra aplicacin en tres capas: - Un proyecto de tipo Librera de clases para albergar la base de datos mapeada - Un proyecto de tipo Librera de clases para albergar la capa de acceso a datos - Un proyecto de tipo Librera de clases para albergar la capa de lgica de negocios - Un proyecto de tipo ASP.NET Web Application para albergar la capa de aplicacin. Que necesitaremos? Como requisitos para realizar este ejemplo, necesitaremos en nuestras maquinas: - Visual Studio 2010 en cualquiera de sus versiones. - SQL Server 2008 en cualquiera de sus versiones. - Una base de datos albergada en nuestro motor de base de datos.
Noodles Tech Club Jorge Cupi jorgecupi@hotmail.com
5.1.
6.2.
Primeramente crearemos un proyecto de tipo Librera de Clases que albergara solo el mapeo de la base de datos. No consideraremos a este proyecto como una capa.
El nombre de mi solucin va de acuerdo a lo que quiero hacer yo, en este caso, un gestor de deportes. El nombre Entidades es el nombre que asignare a mi proyecto que alberga mi archivo .dbml.
6.3.
Para poder manejar nuestra base de datos de manera ms cmoda, mapearemos nuestra base de datos a clases. De esta manera utilizaremos nuestras tablas como si fuesen objetos. Para este objetivo, crearemos una clase Linq To SQL Classes
Un archivo .dbml o data base markup language es un archivo de modelamiento que hace eso precisamente, modelar nuestra base de datos y convertirla para nosotros, de esta manera podemos referirnos a las tablas que tengamos como objetos y a sus campos como atributos.
6.4.
Hacemos click en Server Explorer para poder ver que motores de bases de datos tenemos actualmente corriendo y de ah extraeremos la base de datos o inclusive, solo las tablas necesarias para el proyecto que llevaremos a cabo. Hacemos click en Conectar a una base de datos. Posteriormente saltara una pantalla que nos pida el nombre de nuestra instancia de SQL Server, adems de la base de datos a la cual queremos hacer referencia.
Una vez hayamos hecho click en Ok, podemos ver que nuestro explorador de servidores, ya contamos con nuestra base de datos:
Finalmente, arrastraremos las tablas que necesitamos, en m caso arrastrare todas las tablas de mi base de datos al medio de la pantalla:
Para finalizar, presionaremos F6 para construir la solucin y poder usar la base de datos.
Ok, ya tenemos dos proyectos en nuestra solucin, pero como es que estos proyectos se comunican si es que son independientes? La respuesta es haciendo referencias, ahora veremos cmo hacer una referencia desde un proyecto a otro:
7.1.
Recordemos que la base de datos mapeada est ubicada en el proyecto Entidades, por tanto la haremos una referencia a dicho proyecto de la siguiente manera: Hacemos click derecho en Referencias, y luego click en Anadir Referencia:
A continuacin veremos la siguiente pantalla, donde nos indica otros proyectos existentes en la solucin, hacemos click en Entidades y luego en Ok, de esta manera ya podemos hacer referencias a nuestra base de datos desde nuestra capa de acceso a datos. Tambin haremos referencia a System.Data.Linq que se encuentra en la pestaa .NET de la ventana de referencias.
7.2.
Para poder ahorrar cdigo, crearemos una clase llamada BASEDA, de la cual nuestras clases en la capa de acceso a datos heredaran dos mtodos: - Un mtodo que nos permita interactuar con la base de datos llamado GETDC() - Un mtodo que llevara los valores obtenidos de querys que hagamos a una lista para poder manejarlos de manera ms cmoda.
7.3.
Adems de tener una clase padre para todas nuestras clases, crearemos una Interfaz, de manera que podamos mantener nuestro cdigo ordenado. Con la creacin de un Interface forzamos a nuestras clases a tener los mismos mtodos. Pero por que querramos algo as? Queremos por ejemplo que cada clase tenga los mtodos: - Adicionar - Eliminar - Modificar - DevolverTodo (devolver todos los elementos de una tabla) Para nuestro Interface, aadiremos una nueva clase al proyecto AccesoDatos y lo llamaremos InterfazDA. Veamos el cdigo de nuestro Interface:
Finalmente, ahora si pasaremos a la creacin de nuestras clases pertenecientes a la capa de acceso a datos, tendremos una clase por cada tabla en la base de datos, para este ejemplo solo utilizare dos tablas de mi base de datos:
z
Noodles Tech Club Jorge Cupi jorgecupi@hotmail.com
7.4.
Para la creacin de esta clase, echaremos un vistazo a cada uno de los mtodos que tiene, los mtodos se replican para todas las siguientes clases, as que veremos con detalle que hace cada uno. 7.4.1. Referencias Recuerden que es importante hacer referencia al proyecto Entidades ya que es en el en el que nuestra base de datos esta albergada:
En este caso tenemos la clase DeportistaDA, mis otras clases vendran a ser : <nombre_de_mi_clase>DA Podemos observar que nuestro constructor hereda dos cosas: - Hereda los mtodos de la clase BaseDA - Hereda los mtodos de la Interfaz IDataAccess Las letras que vemos de color plomo son el nombre de una regin de cdigo, si hacemos click en ellas, la regin se expandir se la siguiente manera, mostrndonos as los mtodos que albergan, es una manera ms elegante de separar cdigo, por ejemplo en esta regin tendremos a los mtodos heredados de la Interfaz IDataAccess:
7.5.
De la misma manera, crearemos una clase PaisDA en el proyecto AccesoDatos. Veremos que la creacin de la clase PaisDA es MUY similar a la creacin de la clase DeportistaDA, es tan similar que lo nico que tendremos que hacer es reemplazar la palabra deportista por pas:
Tendremos que hacer lo mismo para todas las tablas que tengamos en la base de datos, o al menos, haremos esto para las tablas en las cuales querramos adicionar, eliminar, y actualizar registros. Si se dan cuenta, en esta capa, no validamos los datos de los deportistas, o paises, las validaciones y otros requerimientos los realizaremos en la capa de negocios o capa logica, que es la que se encarga de estas tareas.
8.1.
En la capa de lgica de negocio necesitamos hacer referencia a ambos proyectos. Por qu? -
Referencia al proyecto Entidades para poder manejar a nuestras clases (tablas de la base de datos) Referencia al proyecto AccesoDatos por que llamaremos a sus mtodos (mtodos de adicin, eliminacin, y otras consultas) desde esta capa.
8.2.
Al igual que en la capa de acceso a datos, utilizaremos una Interfaz en esta capa, todo con el propsito de mantener un cdigo ordenado y ms entendible. No es necesario realizar interfaces en una aplicacin en tres capas, pero esta vez lo haremos por las razones previamente mencionadas. Crearemos una clase en el proyecto LogicaNegocio, y la denominaremos IBusinessLogic, debajo vemos el cdigo empleado en esta interfaz:
8.3.
Tal como lo hicimos con la clase DeportistaDA, daremos un vistazo a los mtodos de esta clase, uno por uno.
8.3.1. Referencias
Recuerden que es importante hacer referencia al proyecto Entidades, as como tambin al proyecto AccesoDatos:
Noodles Tech Club Jorge Cupi jorgecupi@hotmail.com
En este caso tenemos la clase DeportistaBL, mis otras clases vendran a ser : <nombre_de_mi_clase>BL Podemos observar que nuestro constructor hereda los mtodos de la Interfaz IDataAccess, esto con el propsito de tener los mtodos ya vistos (adicin, eliminacin, actualizacin y obtener todos los registros).
Sin embargo, podramos realizar un par de cambios en este mtodo, o bien, podramos crear otro mtodo adicionar que verifique que los datos introducidos sean correctos:
Con este nuevo mtodo Adicionar, podemos verificar por ejemplo que el tamao del campo id_deportista no exceda el limite asignado en nuestra base de datos, tambin verificamos por ejemplo que el pas del que proviene el deportista exista en la base de datos. La capa de lgica de negocios esta para esto, como podemos ver, utilizamos un mtodo ms el mtodo NoSeEncuentra() que devuelve un booleano true si el pas no se encuentra en la base de datos, y devuelve un false si el pas si se encontrara. Si lo notaron, hago referencia al pas de nuestro deportista, como si fuera un atributo propio. Recordemos los atributos de Deportista y de Pas:
Lo notan? Nuestro deportista no tiene un atributo Pas como tal, lo que hace nuestro archivo DBDEportes.dbml es hacer un join por detrs, de tal manera que nos ahorramos escribir una consulta parecida a lo siguiente:
Entonces, lo que hacemos con nuestra base de datos mapeada es en realidad tratar a nuestras tablas como: deportista tiene pas Y no algo as como deportista tiene un cdigo de pas y pas tiene un cdigo pas, Por tanto buscaremos el pas cuyo cdigo de pas sea igual al cdigo de pas el deportista Que viene a ser mucho ms incmodo y tedioso, esto nos ayuda a preocuparnos ms en la lgica que apliquemos en nuestro software y no preocuparnos demasiado por lo que est pasando con la base de datos por detrs. Con este ejemplo, espero quede en claro la funcionalidad de la capa de lgica de negocios. No haremos ni modificaremos los mtodos de Eliminar o Actualizar ya que vendran a ser algo parecido. Solo echaremos un vistazo a los mtodos por defecto que tenemos
9.1.
Referencia al proyecto Entidades para poder manejar a nuestras clases (tablas de la base de datos) Referencia al proyecto LogicaNegocio por que llamaremos a sus mtodos (mtodos de adicin, eliminacin, y otras consultas) desde esta capa.
9.2.
Hacemos doble click en Default.aspx para desplegar su editor XML y de diseo: Probemos nuestra aplicacin ahora, presionemos F5 y veamos que pasa:
Traduciendo el error, nos dice que no podemos iniciar nuestra solucin a partir de un proyecto de Librera de Clases, lo cual es cierto. Dado que un nuestros proyectos de librera de clases no tenemos nada que desplegar hacia nuestro cliente, para corregir este problema, la asignamos el ttulo de proyecto iniciador a nuestro proyecto que alberga la capa de presentacin.
9.3.
Hacemos click derecho en nuestro proyecto Presentacin y luego click en la opcin Establecer como proyecto inicial. Con este paso le decimos a nuestra solucin que es este el proyecto que tiene que iniciarse una vez que intentemos debuggear o correr la aplicacin como tal.
9.4.
Una vez hayamos corregido este problema, presionemos una vez ms F5 y veamos la primera corrida de nuestra aplicacin:
Como podemos observar, se est desplegando en nuestro navegador por defecto (Google Chrome en mi caso) el contenido de la pgina Default.aspx
9.5.
Ya estamos llegando al final de este tutorial, finalmente desplegaremos la informacin almacenada en nuestra base de datos. Como hacemos esto? 9.5.1. Introduciendo elementos en nuestra pagina Primero introduzcamos un botn y una lista de despliegue en nuestra pgina web Para esto, solo habilitaremos la pestaa de Diseo de nuestra pgina web y no as la pestaa de cdigo:
Ya tenemos un botn y una lista de despliegue aadidos, hora de darles funcionalidad. Para lo cual crearemos un evento del botn. El evento por defecto de cualquier botn es el evento Click que sucede como lo dice su nombre cuando un cliente hace click en el botn en cuestin.
Podemos observar que en pantalla tenemos desplegado el Code Behind de nuestra pgina ASP.NET y tras haber hecho doble click en el Botn, acabamos de generar el evento Button1_Click. Esto quiere decir que se ejecutara el cdigo que escribamos aqu cada vez que hagamos click a nuestro botn.
Ya que tenemos referenciados a Entidades y LogicaNegocio podemos comenzar a desplegar algo en pantalla. Intentemos mostrar el nombre de todos los jugadores que tenemos registrados en la base de datos:
Analizando este cdigo: DeportistaBL bl = new DeportistaBL(); Estamos instanciando un objeto de tipo DeportistaBL con el propsito de poder usar los mtodos que tiene este en la capa de lgica de negocios List<deportista> ListaDeportistas = bl.GetAll(); Estamos recogiendo a todos los deportistas en una lista llamada ListaDeportistas que alberga elementos de tipo deportista Foreach (deportista D in ListaDeportes) DropdownList1.Items.Add(D.nombre_deportista); Estamos introduciendo el nombre de cada deportista D que se encuentre en nuestra lista de deportistas denominada ListaDeportistas
Podemos observar que ya tenemos una lista desplegable y un botn en nuestra pgina, presionemos el botn y veamos que pasa:
9.6.
Ya podemos desplegar datos en nuestra pgina, pero eso no es todo lo que haremos en nuestras pginas, tambin vamos a desear adicionar, eliminar o modificar datos. As que en el siguiente ejemplo veremos cmo funciona la adicin de informacin en nuestra base de datos
Dentro de <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> Introduciremos el cdigo de ac arriba, mostramos como es la edicin de una pgina ASP.NET en cdigo, ya que en el anterior ejemplo solo vimos la edicin desde la pestaa diseo. Podemos identificar la creacin de una tabla con dos filas, la primera fila contiene dos columnas, una columna con labels y otra con textboxs En la siguiente fila tenemos un solo botn que es el que accionaremos para grabar en la base de datos la informacin introducida en la pgina web. Nuestra pgina debera de quedar as:
A grandes rasgos, estamos creando un objeto de tipo Pas , y a este le estamos dando los valores introducidos en la pgina web. Posteriormente utilizamos el mtodo AdicionarValidado de la clase PaisBL perteneciente a la capa de negocios que lo que hace es verificar ciertos errores como vemos a continuacin:
Lo que hace este mtodo es verificar si el cdigo de pas no excede los tres caracteres y adems verifica que el cliente no introduzca datos errneos en el campo Continente. Si es que no hay errores, devuelve un mensaje de Datos introducidos satisfactoriamente e introduce los datos en la base de datos utilizando la capa de acceso a datos. Si por otro lado, hay errores, devuelve un mensaje conteniendo el error y NO introduce la informacin en la base de datos.
Espero les haya gustado mi tutorial. Si tienen dudas, preguntas, criticas, comentarios, etc. No duden en: - escribirme al correo jorgecupi@hotmail.com - O encontrarme en Facebook: http://www.facebook.com/JorgeCupi Muchas gracias =).