Capa de Conexión y Negocio

114 views
Skip to first unread message

Carlos Hidalgo

unread,
Jan 5, 2017, 4:10:26 PM1/5/17
to publice...@googlegroups.com
Saludos a Todos

Alguien que amablemente me quiera proporcionar un ejemplo de capa de Conexión (postgres de preferencia) y de Negocio  (lo mas sencillo)  o algún material para leer y aplicar.

Quiero poner en práctica este tipo de programación, he leído algunos ejemplos, pero no se si voy por el camino correcto..

empecé a adaptar para Postgres un ejemplo de Miguel Antunes que encontré en internet (para SQLServer).

Base.prg que es donde se crea la sesión de datos y se inicializa con los parámetros de conexión al servidor (tiene un proc para generar un nombre aleatorio de cursor)

Conexión.prg  que es el que conecta y desconecta al servidor y devuelve el numero de conexión

_execu.prg que es donde se arman las instrucciones SQL. y un SP (Medida:Insert) que me ingresa o actualiza un registro en postgres y seguidamente me ingresa el registro en una tabla local con el mismo nombre. (esto por motivos de consulta para que sean mas rapidas y no estar pidiendo al servidor datos de esta tabla)  

Es algo sencillo lo que he hecho hasta el momento... pero me servirá de base para mis próximos proyectos


Se que aquí no es Escuela :-)  pero si alguien esta en las posibilidades de revisar y decirme si voy bien o que debo corregir o aplicar.

Cualquier comentrario, sugerencia, regaño , reprobacion..  😀 es bien recibido 😀

Saludos
y Gracias desde Ya.

PD
con estos cargo el objeto

gcUsuario='postgres'
driver="PostgreSQL ANSI"
clave="****"
puerto="5432"
servidor="localhost"
basededatos="MiBase"
Negocio=CREATEOBJECT("_EXECU",driver,servidor,puerto,basededatos,gcusuario,clave)
SET DATASESSION TO negocio.datasessionid

negocio.medida_insert(8,"gramos") para insertar un registro

negocio.execsql("select * from medida","Medidas") para hacer una consulta


conexion.PRG
_execu.PRG
base.PRG

Víctor Hugo Espínola Domínguez

unread,
Jan 5, 2017, 4:33:54 PM1/5/17
to publice...@googlegroups.com
Es un estilo diferente del usado por Miguel Antúnez.

Saludos,
Víctor.
Lambaré - Paraguay.

Carlos Hidalgo

unread,
Jan 5, 2017, 5:24:34 PM1/5/17
to publice...@googlegroups.com
Gracias Victor ya lo estoy revisando... Totalmente Diferente..




El 5 de enero de 2017, 15:33, Víctor Hugo Espínola Domínguez <vich...@gmail.com> escribió:
Es un estilo diferente del usado por Miguel Antúnez.

Saludos,
Víctor.
Lambaré - Paraguay.

Víctor Hugo Espínola Domínguez

unread,
Jan 5, 2017, 6:23:48 PM1/5/17
to publice...@googlegroups.com
La técnica de Miguel es más eficiente en performance y permite migrar a otro lenguaje, Delphi/Lazarus, C#, etc.., pero es altamente dependiente de SqlServer y ahí tienes probemas de costo de licencias.

En el otro ejemplo tienes más libertad para elegir los SDBD, pero las capas están todas en VFP!

Saludos,
Víctor.
Lambaré - Paraguay.


Carlos Hidalgo

unread,
Jan 5, 2017, 7:49:36 PM1/5/17
to publice...@googlegroups.com

Si. Ademas me pareció entendible y la verdad no me costo adaptarla a  postrgres,  aunque quiza no se adapte a otros pero es cuestión de aprender a usar el SGBD. 
El problem es con los SP,  En El Ejemplo de Miguel usa un execsp generico (funciona con cualquier SP de Sqlserver.) pero para postgres no logre adaptarlo por la forma en que se envian los parametros.  Me toca hacer un procedure o funcion del objeto Negocio por cada SP que tengo en Postgres. 
Con las consultas normales si me funciona perfectamente.
La verdad me gustaría saber si estoy bien enfocado en esto de la separación de las capas.. O no toy en nada..
Saludos

La técnica de Miguel es más eficiente en performance y permite migrar a otro lenguaje, Delphi/Lazarus, C#, etc.., pero es altamente dependiente de SqlServer y ahí tienes probemas de costo de licencias.

En el otro ejemplo tienes más libertad para elegir los SDBD, pero las capas están todas en VFP!

Saludos,
Víctor.
Lambaré - Paraguay.


Carlos Hidalgo

unread,
Jan 5, 2017, 8:22:38 PM1/5/17
to Comunidad de Visual Foxpro en Español
Tengo una duda.
En tu ejemplo veo que trabaja con una sola tabla (al menos eso entendi)
En el ejemplo del tambien maestro Fer ando D. Bozzo igual (articulo_db.prg)
Mi duda= se hace un Prg de capa de datos para cada tabla o van todas contenidos en uno solo.

Saludos
Gracias

Víctor Hugo Espínola Domínguez

unread,
Jan 5, 2017, 9:13:16 PM1/5/17
to publice...@googlegroups.com
>En tu ejemplo veo que trabaja con una sola tabla (al menos eso entendi)

Sí, es un ejemplo muy simplificado. En un caso real se usarían varias tablas foráneas (Ciudades, Provincias, Paises, TiposDocIdent, Teléfonos, etc...)


>Mi duda= se hace un Prg de capa de datos para cada tabla o van todas contenidos en uno solo.

Esto también está simplificado, en mis sitemas uso el siguiente esquema:
- Una clase base genérica, en el INIT se establece la conexión con la base de datos, y hay métodos para leer y guardar datos con diferentes parámetros, algunos de esos métodos:

   - Procedure CkOk                         && Verifica que una clave candidata no exista
         Lparameters     ;
               tcTabla, tcCamposCK, tcTiposCamposCK, tcDatosCK, tcCampoPK As String, tuValorPK As Variant

   - Procedure  TraerRegPorClavePrimaria    && Traer un registro dada la PK
         Lparameters     ;
             tcTabla As String, tcClavePK As String, tuValorPK As Variant, tcCampos As String

   - Procedure TraerDatosPorSelect(tcSelectSql, tcCursor As String, tlReadWrite As Boolean) As String

Una subclase de la genérica por cada módulo/sistema con métodos específicos del módulo
Algunos de esos métodos:

- Procedure InsertarCliente(tcXmlCli As String) As String

- Procedure ActualizarCliente(tcXmlCli, tcCamposModificados As String) As String

Otra forma de organizar la capa de datos es una clase genérica y una clase por cada entidad (tabla), es la técnica sugerida por Fernando Bozzo, probablemente la más difundida.

Carlos Hidalgo

unread,
Jan 6, 2017, 11:15:15 AM1/6/17
to publice...@googlegroups.com
Gracias por las aclaraciones Victor..
Me has despejado varias dudas..
Con esto ya puedo continuar
 
Feliz Viernes!!









Reply all
Reply to author
Forward
0 new messages