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.