Veo que tenes un archivo de configuracion. Ponele nombres distintos a cada capa 
y levantas de ahi el nombre de la que queres usar.

* Saco esto del archivo de configuracion
obj = "Label" 

* Creo el objeto que me hace falta
x = CreateObject(obj)

Pablo Pioli

----- Original Message ----- 
From: Alejandro Paciotti Iacchelli 
To: GUFA List Member 
Sent: Monday, May 17, 2010 6:03 PM
Subject: [GUFA] 3 Capas


Estimados colisteros: 

                Tengo una duda en cuanto a la implementación de clases en 3 
capas y es la siguiente:

 

Una capa de datos se encarga de comunicarse con la base de datos y subir las 
consultas y respuestas a la clase de negocios, por ende, si yo cambiase la capa 
de datos, la clase de negocios tendría que salir funcionando perfectamente. Con 
lo cual la aplicación  lograría escalabilidad.

 

Ahora bien, suponiendo que yo desarrollo una capa de datos llamada 
CapaDeAccesoaDatos,  con la funcionalidad de conectarse a un SQLSERVER, pero 
también tengo otra clase, CapaDeAccesoaDatos con la funcionalidad de conectarse 
a un FIREBIRD o un Access o base nativa de FOX.

 

Las clases de negocio implementarían objetos basados en esa clase, pero, que 
pasa si yo tengo que hacer que convivan entre ellas estas clases ?

 

A ver si con código me explico mejor:

 

&& Esta es la clase de Acceso a Sql Server (Es solo un ejemplo breve)

 

 

DEFINE CLASS CapaDeAccesoaDatos AS CUSTOM

cStringDeConexion = ""

nConexion = 0

                PROCEDURE INIT (cArchivoDeConfiguracion)

                               THIS.cStringDeConexion = 
FILETOSTR(cArchivoDeConfiguracion)

ENDPROC

 

PROCEDURE Conectar

                THIS.nConexion=SQLSTRINGCONNECT(cStringDeConexion)

ENDPROC

 

PROCEDURE Ejecutar(cInstruccion)

                =SQLEXEC(THIS.nConexion, cInstruccion)

ENDPROC

ENDDEFINE

 

&& Y esta es la clase de Acceso a una base de FOX

 

DEFINE CLASS CapaDeAccesoaDatos AS CUSTOM

cNombreDeBaseDeDatos= ""

                PROCEDURE INIT(cArchivoDeConfiguracion)

                               THIS. cNombreDeBaseDeDatos = 
FILETOSTR(cArchivoDeConfiguracion)

ENDPROC

 

PROCEDURE Conectar()

                OPEN DATABASE (THIS.cNombreDeBaseDeDatos)

ENDPROC

 

PROCEDURE Ejecutar(cInstruccion)

                &cInstruccion

ENDPROC

ENDDEFINE

 

 

 

Si pongo estas 2 clases en un solo PRG, cuando creo un objeto:

 

oBase = CREATEOBJECT("CapaDeAccesoaDatos", "ArchivoConfiguracion.txt")

 

crea el objeto de acuerdo al último DEFINE CLASS.

 

Si los pongo en distintos PRG tengo que especificar en el FRONT que clase de 
acceso a datos usar, ya que en los DEFINE de la clase de negocios no puedo usar 
el SET PROCEDURE TO.

 

No se si los marié con la pregunta, es muy probable, pero sería una 
consecuencia del propio mareo que tengo.

 

De antemano, gracias.

 

 

 

Responder a