Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/06/2005, 20:00
luiguiray
 
Fecha de Ingreso: octubre-2003
Ubicación: Los Mochis, México.
Mensajes: 81
Antigüedad: 20 años, 6 meses
Puntos: 0
Generic Data Access Layer

Visual Studio 2005 beta 2 Framework 2.0
Problema: Crear clase Base para acceso a datos generica (se usa el namespace common System.Data.Common)
================================================== ================================================== ===
A partir del namespace System.Data.Common se diseña una clase que permite generar objetos
desde el objeto DbProviderFactory para cada Proveedor de acceso a datos.

De esta manera es posible crear objetos como SqlConnection, OleDbConnection, etc...pero no
explicitamente identificados de esa manera.

Ejemplo:

DbProviderFactory dpf = DbProviderFactories.GetFactory(DataProviderName);
DbConnection dbConn= dpf.CreateConnection();

Al igual que esos objetos se crea un Adaptador que a este se le definen cada uno de los
commandos que llevara a cabo con un objeto DbCommand.

El problema aqui es que puesto que el Adaptador es generico no es posible utilizarlo para
diferentes Tablas, vistas, etc...de una manera mas llana seria decir por ejemplo que el
comando Select del Adaptador creado para la tabla Clientes no es el mismo que el que se crea
para la tabla Ordenes.

Mas que nada me gustaria conocer una arquitectura en ese sentido, hasta el momento la unica
solucion no tan compleja que tengo es crear una clase derivada de la clase base que implemente
por ejemplo un metodo SetUpCommands por llamarlo de alguna manera, de tal forma que sea el
encargado de crear los comandos, definiendo por ejemplo, si es comando de tipo Texto, un
StoreProcedure, si lleva parametros, etc. ademas del string de SQL estandar a que estara ligado.

Ejemplo general de diseño de arquitectura del DAL

ClaseBaseDAL {
//propiedades o variables
strSelCmd = "" //variable que almacenara el comando de seleccion para clase derivada
strDelCmd = ""
strInsCmd = ""
strUpdCmd = ""
// metodos
.SetUpConnection() // encargado de crear el objeto para la conexion dependiendo del provider elegido
.SetUpCommands() // crea un objeto comando del tipo de provider elegido. Metodo implementado en la clase derivada para asignar su correspondiente comando
.SetUpAdapter() // Crea un objeto adapter
...etc
}

ClienteDAL : ClaseBaseDAL {
//en esta clase se implementa el metodo SetUpCommands() y SetUpAdapter()
//para definirlos en funcion de la entidad (en este caso es Cliente)

}

Es por eso que me interesa crear una arquitectura mas generica para no tener que estar generando una
clase DAL para cada Entidad.

Alguna sugerencia?...


Todo esto sin partir de la Interfaz que es implementada por los diferentes proveedores de datos.
IDbConnection
IDbcommand, etc...
================================================== =================================================

Articulos de referencia

http://www.codeguru.com/Csharp/.NET/...cle.php/c9373/

Gracias!
__________________
Te amo flakita (jrk)