martes, 1 de abril de 2008

Ds - Dt vs2005 - Capa Negocio

DataSet/DataTable tipados y Table Adapter con Visual Studio 2005 y 2008
Introducción- Data Label- Capa de Datos- Capa de Negocios- UI Interfaz

Crear Capa de Negocios


Despues de haber creado la Capa de Datos y de generar ésta, lo siguientes es crear nuestra Capa de Negocios. En esta utilizaremos las estructuras definidas en nuestra capa de datos con el objeto de capturar la información y realizaremos las llamadas a los métodos de transacciones definidos que nos permitirán realizar desde la Capa de Datos el acceso a la Base de Datos. Lo ideal es que las llamadas a la Base de Datos siempre se hagan desde la Capa de Negios hacia la Capa de Datos y que la ultima realice la transacción y entregue el resultado a la Capa de Negocio. A su vez, la Capa de Negocio es instanciada desde la UI (Interfaz de Usuario) y esta a su vez, retorna los resultados a ésta.

Para poder construir una capa de negocio, se necesita crear un nuevo proyecto de bilbioteca de clases, el cual nos permitirá manejar todo en ambito del negocio dentro de esta clase. Adicionalmente, en esta Capa deben existir los objetos que se han definido en la Capa de datos, ya que los objetos son parte importante de un diseño OO y de una arquitectura de aplicación (A ver si algún día publico como hacer un buen análisis y diseño Orientado a los Objetos), ya que todos dicen siempre saber, pero nunca lo hacen. Para crear el nuevo proyecto, desde el explorador de soluciones seleccionaremos con el boton derecho del mouse (sobre la solución), la opcion agregar/nuevo proyecto, como se muestra a continuación:


Se deplegará la interfaz de definición de proyectos en donde definiremos el nombre de este, como se muestra a continuación:





Bueno, ya creado el proyecto de Biblioteca de Clases que hemos llamada CapaNegocio, borraremos la clase que se crea por defecto y, con el botón derecho de mouse, seleccionaremos (sobre el proyecto creado), la opción Agregar/nuevo item y seleccionaremos la plantilla de Clase de Componentes, que la llamaremos clsEmpleado, respetando el nombre del objeto, como se muestra a continuación:





Al agregar este elemento veremos que se despliegua un diseñador (Bueno, hasta acá todo bien). El siguiente paso será ir a la ventana de herramientas y veremos que al generar el proyecto de Capa de Datos, en el paso anterior se han agregado los controles asociados al dataset y a los TableAdapters que se encuentran definidos para cada una de las entidades mapeadas que componen el objeto, si no se encuentran los componentes del objeto CapaDato en el cuadro de herramientas, deben volver a generar este. Para poder verlos también, deben de tener habierto el diseñador del objeto de clase de componentes que se ha definido. Ver figura.


El siguiente paso será arrastrar a la ventana del diseñador el componente lnqUsuarioTableAdapter, en el diseñador, seleccionaremos el componente agregado y en la ventana de propiedades lo renombraremos como dallnqUsuario (dal de Data Access Label).

Lo que hemos hecho es definir la instancia de llamada al control de la capa de datos que contiene el o los métodos de transacción con la Base de Datos, la interfaz quedará de la siguiente forma:



Al inluir el componente al diseñador, automáticamente se agregar al proyecto de Capa de Negocio una referencia al proyecto de Capa de Datos y en este caso, tenemos acceso a los métodos del TableAdapter lnqUsuarioTableAdapter.


Hasta ahora todo bien, pero tenemos que picar código, para ello nos posicionaremos en el diseñador y seleccionaremos con el botón derecho del mouse la opción Ver código, el cual nos mostrará la ventana de código de la aplicación. Ver figura.



Esto abrirá el archivo de código de la clase de componentes, como yo trabajo en C#, espero que no les moleste que presente los códigos de de los métodos con este lenguaje.

Dentro del espacio de trabajo de la clase y debajo del contructor agregaremos la función que será llamada desde la UI y que retornará la lista de los Usuarios, la cual se muestra a continuación:


// funci¢n encargada de retornar la informacion
public CapaDato.dsEmpleado.lnqUsuarioDataTable fnUsuarioLista() {
CapaDato.dsEmpleado.lnqUsuarioDataTable dt = new
CapaDato.dsEmpleado.lnqUsuarioDataTable();
try{
dt = this.dallnqUsuario.GetDataByUsuarioListar();
}catch (Exception ex) {
throw ex;
}
return dt;
}

Analisemos el código


Como se observa, creamos una función fnUsuarioLista, que retornará la estructura de la tabla lnqUsuario con los datos que este tenga asociados, en el caso de que exista algún tipo de problema elevamos una exception a la UI, que es donde se deben definir los controles de errores para cada aplicación que consuma las llamadas.


Si se observa dallnqUsuario referencia al TableAdapter de la Capa de Datos y es esta la que realmente realiza la transacción con la Base de Datos.


A continuación pongo todos los otros códigos de transacción entre la Capa de Datos y la Capa de Negocios.

// funcion encargada de realizar la inserci¢n de datos de un nuevo usuario
public int prcUsuarioInsertar(Int32 empCodigo, string usuLogin, string usuClave) {
int iReturn = 0;
try {
this.dallnqUsuario.prcUsuarioInsertar(empCodigo, usuLogin, usuClave, ('A').ToString());
}catch (Exception ex) {
throw ex;
}
return iReturn;
}

// funcion encargada de modificar los datos de un usuario
public void prcUsuarioModificar(string usuLogin, string usuClave, string usuEstado){
try {
this.dallnqUsuario.prcUsuarioModificar(usuLogin, usuClave, usuEstado);
}
catch (Exception ex)
{
throw ex;
}
}


// funci¢n encargada de eliminar los datos de usuario
public void prcUsuarioEliminar(string usuLogin, string usuClave) {
try{
this.dallnqUsuario.prcUsuarioEliminar(usuLogin, usuClave);
}catch (Exception ex){
throw ex;
}
}


Lo que nos queda es definir lo mismo que hicimos para lnqUsuariosTableAdapters en lnqEmpleadosTableAdapters, es decir, arrastrar este componente desde el cuadro de herramientas al diseñador, renombrarlos como dallnqEmpleado y luego crear la función de consulta del procedimiento utilizando el id seleccionado, todo quedaría de la siguiente forma:

Y la función que retorna el registro debe quedar de la siguiente forma:


// funci¢n que retorna la informaci¢n de los datos del empleado
public CapaDato.dsEmpleado.lnqEmpleadoDataTable fnUsuarioConsultar(int empCodigo) {
CapaDato.dsEmpleado.lnqEmpleadoDataTable dt = new
CapaDato.dsEmpleado.lnqEmpleadoDataTable();
try {
dt = this.dallnqEmpleado.GetDataByEmpleadoConsultar(empCodigo)
}catch (Exception ex){
throw ex;
}
return dt;
}


Bueno amigos, con esto hemos dado una pincelada a los conceptos de programación orientada a los objetos en vs2005 y vs2008, ya nos queda poco, solo falta la UI.


4 comentarios:

Anónimo dijo...

Excelente aporte, pero seria completo si subiera el codigo fuente, yo he seguido tu codigo a la pata de la letra(chilenismo) 5 veces pero me faltan objetos en mi VB.

De antemano, te agradece Soul Alone

pereyra.antunez dijo...

Hola, imagino que estas tapado de trabajo, pero me gustaría pedirte un favor.
¿Serias tan gentil de poner el código del ejemplo también en Visual BASIC?
La verdad que me cuesta mucho traducírmelo de C # a VB.
También deseo felicitarte por tu aporte y tu gran capacidad de comunicación.
Saludos.

Mario Roa dijo...

Hola ignacio.
Creo que a corto plazo me es imposible publicar el código en VB,
Ya que estoy desarrollando, en mi tiempo libre una aplicación independiente de administración y gestión de proyectos y de recursos humanos. Trataré de publicar lo que me pides despues de enero.

Un saludo

Mario Roa dijo...

Amigos cuando quieran transformar codigo sin mucho trabajo pueden usar este link que les ayudara a pasar a distintos lenguajes

http://www.developerfusion.com/tools/convert/csharp-to-vb/

Saludos y mucha suerte