Proyecto en N Capas
Proyecto en N Capas
Proyecto en N Capas
1. INTRODUCCION:
Las aplicaciones de acceso a datos, forman casi de forma habitual, parte de una aplicación
Windows estándar. Sin lugar a dudas, en muchas ocasiones, nos resultará imprescindible acceder a
fuentes de datos. En esta sesión, veremos cómo acceder a fuentes de datos de forma sencilla,
desde nuestro entorno de desarrollo. Desde Visual C# .Net se puede acceder a distintas bases de
datos, utilizando las clases adecuadas, podemos citar a:
Oracle
SQL Server
Access
MySQL Server
PostgreSQL
Las que se puedan acceder a través de ODBC (Open DataBase Connectivity), es un estándar de
acceso a Bases de datos desarrollado por Microsoft Corporation, el objetivo de ODBC es hacer
posible el acceder a cualquier dato desde cualquier aplicación, sin importar qué Sistema Gestor de
Bases de Datos (DBMS por sus siglas en inglés) almacene los datos
2. ADO.NET
ADO.NET es una de las tecnologías para conectarse a un gestor de bases de datos, con un alto
nivel de abstracción, lo que nos permite olvidarnos de los detalles de bajo nivel de las bases de
datos. Además ADO.NET es una tecnología interoperativa. Aparte del almacenamiento y
recuperación de datos, ADO.NET introduce la posibilidad de integrarse con el estándar XML, los
datos pueden 'Serializarse' directamente a y desde XML lo que favorece el intercambio de
información.
ADO.NET proporciona diferentes clases del nombre de espacio System.Data dentro de las cuáles,
destacaremos, la clase DataView, la clase DataSet y la clase DataTable.
Curso: Teoria de Lenguaje y Compiladores -1- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
ADO.NET es por lo tanto, un conjunto de clases que nos permiten leer e interactuar con fuentes de
datos almacenadas en bases de datos y otras fuentes de almacenamiento de datos.
Curso: Teoria de Lenguaje y Compiladores -2- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
Lo primero que aparece es una conexión, en la que se especifica la información para la conexión
con la base de datos. A continuación, se crea un adaptador de datos, que administra la
recuperación de los datos de la base de datos y envía los cambios en los mismos. Luego se crea un
conjunto de datos, que es una representación de una o varias de las tablas de la base de datos
con la que se desea trabajar en el programa (en realidad no se manipulan los datos reales, sino
una copia de los mismos). La información contenida en un conjunto de datos se puede enlazar con
lo controles de un formulario.
Cuando trabajamos con fuentes de datos dentro de la tecnología .NET, podemos trabajar con
fuentes de datos conectadas o fuentes de datos desconectadas.
La diferencia entre ambos métodos de conexión es clara. Por un lado, el trabajo con fuentes de
datos conectadas, requiere que exista un canal de comunicación existente entre la aplicación y la
fuente de datos en todo momento. De esta manera, la conectividad con la aplicación, la apertura
de la conexión, etc., que es la tarea más pesada en la comunicación de una aplicación con una
fuente de datos, permanece abierta mientras se trabaja con la fuente de datos, estemos en un
instante dado manipulando datos de la fuente de datos o no. Por decirlo de otra forma, la puerta
de acceso la hemos dejado abierta y pasaremos de una habitación a otra y viceversa cuando
queramos.
Por otro lado, el trabajo con fuentes de datos desconectadas, requiere que cuando se accede a
la base de datos, se recoja no sólo una copia de los datos con los que vamos a trabajar, sino que
además se almacene una copia de la estructura de la tabla o tablas que hemos decidido descargar
y otros datos relacionados con las tablas. En sí, es una copia exacta o una foto exacta de los datos
de la tabla o tablas y de todas las características de la tabla o tablas. Por lo tanto, se abre un canal
de comunicación, se recogen los datos para trabajar con ellos y se cierra nuevamente el canal de
comunicación. Esos datos se almacenan en memoria, y se trabaja por lo tanto, con los datos de
memoria, no con la fuente de datos directamente como en el caso anterior dónde trabajábamos
con fuentes de datos conectadas.
Curso: Teoria de Lenguaje y Compiladores -3- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
La única particularidad a tener en cuenta en este último caso, es que como lógicamente haremos
una copia de la estructura, propiedades, características y datos de la tabla o tablas con las que
queremos trabajar de forma desconectada, no es muy recomendable por no decir totalmente
prohibido, hacer una copia de cualquier tabla, ya que podemos sobrecargar la aplicación y afectar
considerablemente en el rendimiento de ésta.
5. LAS CLASES.
Cada base de datos dispone de una clase especializada en el manejo de la misma.
Oracle OracleClient
SQL SQLClient
Access OleDb
Odbc ODBC
Genérico DB
Y estas clases están disponibles en el espacio de nombres System.Data. Como vamos a centrarnos
en SQL, la clase que utilizaremos será SQLClient.
using System.Data.SqlClient;
6. LOS OBJETOS.
Podemos clasificarlos o agruparlos en:
Conexión.
Almacenamiento.
Visualización.
Otros.
6.1. Conexión.
Curso: Teoria de Lenguaje y Compiladores -4- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
gestiona los datos entre la base de datos y la aplicación a partir de los datos facilitados en
la conexión.
6.2. Almacenamiento.
DataReader System.Data.Odbc.OdbcDataReader
El objeto DataReader es un objeto ágil y que está especializado en almacenar datos para
solo lectura, lo que le quita la gestión de las actualizaciones y le permite ser más rápido en
los accesos a los datos de la base de datos.
DataTable System.Data.DataTable
El objeto DataTable, es lo más parecido a una tabla de la base de datos, dispone de la
posibilidad de definir clave primaria de uno o varios campos.
El DataTable puede ser la imagen de una tabla de la base de datos, o puede ser el
resultado de una SQL que combine varias tablas en la SQL, o tabla virtual si queremos
llamarla así. Este objeto en el uso del DataSet es usado como parte del DataSet.
DataSet System.Data.DataSet
DataRow System.Data.DataRow
6.3. Visualización.
Los objetos de visualización puede ser cualquiera de los que tenemos disponibles en el
entorno de programación. Lo importante aquí es como utilizarlos a la hora de visualizar los
datos de nuestra fuente de almacenamiento.
Las dos son válidas evidentemente, pero hay que ver la practicidad.
Curso: Teoria de Lenguaje y Compiladores -5- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
El enlazado de un TextBox a un objeto crea el mismo código que hacer una asignación manual
o clásica.
La clase DataView, por otro lado, nos permite crear múltiples vistas de nuestros datos para
presentar los datos de su correspondiente DataTable posteriormente. Adicionalmente a esto,
también podemos ordenar y filtrar los datos, buscar y navegar un conjunto de datos
dado, etc.
6.4. Otros.
BindingSource
CommandBuilder
Command
BindingSource, este objeto es el que hace de puente entre aquellos objetos que no disponen
de la propiedad DataSource y el objeto fuente de los datos.
CommandBuilder, este genera de forma automática código SQL para las opciones Insert,
Update y Delete, tanto para el uso normal, como para cuando se utiliza el DataAdapter en el
entorno de un DataSet.
Command, sirve para indicar, almacenar y ejecutar cuando proceda, la instrucción SQl, sea
almacenada o incrustada, para un objeto DataReader o DataAdapter.
Curso: Teoria de Lenguaje y Compiladores -6- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
NIVEL DE
APLICACION
NIVEL DE
DATOS
En primera instancia un desarrollo con una arquitectura por capas tenemos que concientizarnos de
partir las diferentes funcionalidades que deseemos realizar en nuestro desarrollo en varias partes y
ubicarlos dentro de una de las capas que hayamos definido dentro de nuestra arquitectura.
Capa de Presentación
Como podemos observar de arriba hacia abajo tenemos una serie de capas, en donde la capa
inicial es la capa de presentación o de interface de usuario, esta capa esta conformada por los
formularios de la aplicación Windows o por las páginas .aspx o web forms de una aplicación
ASP.NET. En cuanto al tema de las aplicaciones para dispositivos móviles la capa de
Presentación será la aplicación Windows Mobile.
Esta capa hablando en términos de desarrollo con Visual Studio, es el proyecto de tipo
Windows Application, o Web Application, o aplicación Windows para Windows Mobile.
Capa de Negocio
Esta capa es la segunda en la estructura de la imagen, en esta capa es donde debemos
colocar el código de nuestra aplicación que se encargue de realizar las operaciones inherentes
al negocio o tipo de aplicación que estemos desarrollando.
Curso: Teoria de Lenguaje y Compiladores -7- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
Algunos se preguntarán, pero cuales son esas tareas del negocio? esto a veces es un poco
subjetivo y algunos no alcanzamos a descubrir línea que nos permite saber que es lo que
debe ir en esta capa.
Bueno, vamos a tratar de aclarar este punto, en esta capa se definen las operaciones o
cálculos que se necesiten realizar para las operaciones de nuestra aplicación.
En esta capa se arman las interfaces para llamar los diferentes métodos que devuelven datos
a nuestra aplicación, porque esta es la capa con al cual interactuaremos desde la capa de
Presentación. Esto quiere decir que desde la presentación no estaremos en contacto directo
con la capa que maneja los datos de nuestro repositorio de datos.
Esta capa también es la encargada de solicitar los datos a la capa del manejo de los datos y
los entrega a la capa de Presentación.
Recuerden en esta capa si necesitamos realizar alguna operación como el calculo de un total,
un promedio, etc., aquí es donde debemos realizar esa operación y devolverla a la capa de
presentación.
Espero que en el ejemplo esto lo pueda explicar mucho mejor y sea mas claro para todos. En
nuestra solución de Visual Studio esta capa es un proyecto de tipo librería de clases que
agrupa todas las clases necesarias.
Capa de Manejo de Datos
Esta es una de las capas mas importantes, esta capa es la encargada de la creación de los
diferentes “querys” o consultas a la base de datos para obtener los datos que necesitamos
en nuestra aplicación.
Esta capa también es la encargada de convertir los datos que devuelve la capa que interactúa
con nuestra base de datos, o sea un datatable, un datareader o un dataset, en una lista
genérica o una colección de objetos de tipo entidad como veremos mas adelante en una de
las capas ( la capa transversal).
Esta capa esta representada por un proyecto de tipo librería de clases dentro de nuestra
solución de Visual Studio.
Esta capa es un proyecto de tipo librería de clases en nuestra solución de Visual Studio, en
esta capa vamos a tener una clase que se conecte a la base de datos que vayamos a utilizar y
se encarga de realizar todas las operaciones contra la base de datos seleccionada como
repositorio de datos de nuestra solución.
La importancia de esta capa radica en que si cambian el motor de base de datos el impacto
en nuestra aplicación va a ser mínimo pues solo hay que modificar o corregir esta capa para el
acceso y conexión a la nueva base de datos.
Curso: Teoria de Lenguaje y Compiladores -8- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
En esta capa vamos a definir las clases de tipo entidad en la cual vamos a transportar los
datos entre las diferentes capas de nuestra solución.
Las clase de tipo entidad son una copia de la estructura de nuestras tablas de la base de
datos a utilizar, o de acuerdo a las necesidades que tengamos.
Por ejemplo los resultados que necesitamos para un reporte impreso por lo general son muy
variables y toca crear una entidad única para ellos.
Bueno esto no es una ley, como dije antes todo depende de nuestro proyecto y de la manera
que queramos hacer las cosas, muchas veces las primeras dos capas se unen y quedan en
una sola, todo depende de cada uno de nosotros.
Curso: Teoria de Lenguaje y Compiladores -9- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
1. Investigación Preliminar.
2. Identificado los Requerimientos del sistema.
3. Realizado el Levantamiento de la Información.
4. El Análisis del sistema.
El Diseño del Sistemas se define con el proceso de aplicar ciertas técnicas y principios con el
propósito de definir un dispositivo, un proceso o un Sistema, con suficientes detalles como para
permitir su interpretación y realización física.
El diseño debe implementar todos los requisitos explícitos contenidos en el modelo de análisis y
debe acumular todos los requisitos implícitos que desea el cliente.
La importancia del Diseño del Software se puede definir en una sola palabra Calidad, dentro del
diseño es donde se fomenta la calidad del Proyecto.
El Diseño es la única manera de materializar con precisión los requerimientos del cliente. Las
etapas del diseño del sistema son:
Entonces una vez definido el Diseño de los Datos entonces iniciaremos con el Diseño
Arquitectonico, el Diseño de la Interfaz y luego realizar la codificación.
II. Luego en la ventana de dialogo de Nuevo Proyecto, ingresamos a Plantillas – Otros Tipos de
Proyectos – Soluciones de Visual Studio y elegimos una Solución en Blanco.
2
1
3° Elegimos un tipo de proyecto para crear una biblioteca de clases para las otras capas,
repetimos los pasos para agregar un Nuevo Proyecto:
1° Vamos a comenzar a agregar las referencias para la capa de presentacion, esta tendra como
referencia la capa Entidad y la capa de Negocio.
2° Continuamos con la Capa de Negocio, esta tendra como referencia la capa de Manejo
Datos y la capa Entidad:
Al restaurar la
Base de Datos,
podemos
Carpetas de observar las
la solución tablas que
ubicados en contiene, revise
una unidad el diagrama
de Disco. entidad relación
que se
encuentra en la
carpeta
Diagrama de
Base de Datos.
2° Ahora crearemos el procedimiento almacenado para listar los registros de una tabla
Procedimiento Almacenado o Store Procedures (En inglés) son unidades de código compuestas
por una o más sentencias Transact-SQL y que son almacenados en el servidor. Los SPs nos dan
la habilidad de extender el lenguaje T-SQL gracias a que podemos añadir nuestras propias
subrutinas y procedimientos para las bases de datos en nuestro caso SQL SERVER.
b. Escribimos el SP que permitirá listar las marcas registradas en TB_MARCA ordenados por el
campo idmarca:
En este
caso, using sirve para
especificar bloques de
código en los que se
van a utilizar recursos
que deben ser
liberados
obligatoriamente al
finalizar, como podrían
ser conexiones a base
de datos, manejadores
de ficheros, o recursos
del propio sistema
operativo. De
hecho, salvo en
contadas ocasiones,
utilizar using es la forma
más recomendable de
tratar estos asuntos.
Implementamos el Metodo GetAll(): el cual devolverá un objeto de tipo DataTable a partir del
Store Procedure indicado.
Implementamos:
Formulario en Ejecución: