Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-07-2011
linuxtin linuxtin is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 30
Poder: 0
linuxtin Va por buen camino
Evitar variables globales....

Holaa!! Como andan!!! La duda que tengo es la siguiente, tengo un form llamado login, en este form lo que hago es identificar y autenticar al usuario, una vez que los datos son correctos guardo por medio de una consulta sql el ID del empleado, la fecha de ingreso, etc.

Hasta ahí todo bien, después lo que hago es guardar en una variable global el ID_Cliente, y hago el form invisible. Esto lo hago porque durante la ejecución del programa uso el ID_Cliente que se logueo para otros usos, como por ejemplo cuando carga algún dato, o modifica guardo el ID_Empleado que lo hizo, ademas de darle los permisos en fin...

No habrá otra manera de hacer esto para evitar la variable global??

Desde ya muchas gracias!!!
Responder Con Cita
  #2  
Antiguo 21-07-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
yo hago algo similar
pero la variable no la asigno en el form del login sino mas bien en el DataModule

y cuando quiero hacer referencia a la variable hago mas o menos asi

Código Delphi [-]
 
tblloqueseaUsuario.asstring := dmGlobal.g_Usuario;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 21-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por linuxtin Ver Mensaje
No habrá otra manera de hacer esto para evitar la variable global??
Puedes guardarlo en alguna tabla, por ejemplo.
Responder Con Cita
  #4  
Antiguo 21-07-2011
linuxtin linuxtin is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 30
Poder: 0
linuxtin Va por buen camino
Cita:
Empezado por linuxtin Ver Mensaje
Holaa!! Como andan!!! La duda que tengo es la siguiente, tengo un form llamado login, en este form lo que hago es identificar y autenticar al usuario, una vez que los datos son correctos guardo por medio de una consulta sql el ID del empleado, la fecha de ingreso, etc.

Hasta ahí todo bien, después lo que hago es guardar en una variable global el ID_Cliente, y hago el form invisible. Esto lo hago porque durante la ejecución del programa uso el ID_Cliente que se logueo para otros usos, como por ejemplo cuando carga algún dato, o modifica guardo el ID_Empleado que lo hizo, ademas de darle los permisos en fin...

No habrá otra manera de hacer esto para evitar la variable global??

Desde ya muchas gracias!!!
Muchachos me equivoque donde dice ID_Cliente es ID_Empleado.

Gracias a los dos por responder, oscarac porque un datamodule y no una unidad?

Casimiro el ID_Empleado lo guardo en la tabla del login, pero de todas formas me tengo que quedar con la variable del ID_Empleado hasta que este cierra sesión. Se entiende??

Desde ya muchas gracias!
Responder Con Cita
  #5  
Antiguo 21-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si te hace falta en todo momento y en cualquier sitio del programa entonces lo mejor es esa variable global

Me refería a guardarlo en una tabla para cuando te hiciera falta, para hacer algo así como:
Código SQL [-]
select id_empleado from tbConectado
Así, sin más, una tabla con un sólo registro, el empleado conectado.
Aunque así estás limitando tu programa a monousuario.
Lo dicho, sigue con la variable global, a veces hay que usarlas.
Responder Con Cita
  #6  
Antiguo 21-07-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por linuxtin Ver Mensaje
... después lo que hago es guardar en una variable global el ID_Cliente, y hago el form invisible. Esto lo hago porque durante la ejecución del programa uso el ID_Cliente que se logueo para otros usos, como por ejemplo cuando carga algún dato, o modifica guardo el ID_Empleado que lo hizo, ademas de darle los permisos en fin...

No habrá otra manera de hacer esto para evitar la variable global??

Desde ya muchas gracias!!!
De hecho estás mal implementando la idea de variables globales. En tu caso es lo que necesitarías. Supongo que lo que tú realmente quieres evitar es utilizar la variable del formulario. De hecho es lo mejor, porque así podrías liberar la memoria utilizada por el formulario de inicio una vez que el usuario ha iniciado sesión.

Supongo que tu código debe ser algo cómo esto:
Código Delphi [-]
type
    TFormularioInicio = class(TForm)
    public
        id_empleado: Integer;
    ....
Esto hace que la variable id_empleado dependa de una instancia de TFormularioInicio. Lo que debes hacer para evitar esta dependencia es sacar la mencionada variable de la declaración de TFormularioInicio. Mueve la variable id_empleado a la sección de variables globales mantenidas por la unidad. Por ejemplo:

Código Delphi [-]
unit inicio_sesion

interface
    uses ...
    
type
    TFormularioInicio = class(TForm)
    ....
    end;
    
var
    FormularioInicio: TFormularioInicio
    id_empleado: Integer; // <= nuevo lugar de la variable
                          // (será global y no dependerá de una
                          //  instancia de TFormularioInicio).
                          
implementation
    ....

Espero que esto sea lo que realmente necesitas y que también hallas entendido lo que he querido decir.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #7  
Antiguo 21-07-2011
linuxtin linuxtin is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 30
Poder: 0
linuxtin Va por buen camino
Gracias Chris! Se entendió lo que explicaste, por lo que veo no queda otra que usar variable global. Es que siempre leí que hay que tener cuidado con estas variables, que no es una buena técnica usar estas variables pero en algunos casos veo que no queda otra opción!!

Saludos y gracias a todos!!
Responder Con Cita
  #8  
Antiguo 22-07-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola,
linuxtin no es que hay que evitar usarlas. Habrá momentos en que se requiere de un contexto global y en otras ocasiones que es viable el local.

Todo tiene sus pros y contras, y su campo de uso.

Esto del no usar variables globales se ha convertido en un mito... tan arraigado que uno se cree que es peligrosísimo, un terrible pecado. Y luego van los profes promoviendo eso, y luego estos estudiantes al ocupar el lugar de profes, vuelven a vender el mismo pensamiento.

¡Las variables globales no son malas! Lo que es malo es el mal uso (y/o abuso) de ellas... en todo caso la culpa es de quien programa que no lleva los controles adecuados, porque si lo hiciera y fuera ordenado no hay problema alguno de usarlas. Pero claro es más fácil decir ¡no las uses!

Es justo el mismo problema y estigma que carga el concepto del Acoplamiento. Muchos lo han victimado y culpado de todos los mil y un males... El acoplamiento es inevitable, siempre habrá algo (como siempre habrá alguna variable global, sino me crees busca por Application ). Lo que hay que hacer, en todo caso, es controlarlo y equilibrarlo junto al concepto de Cohesión... en las variables globales es lo mismo: controlar y equilibrar su uso.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 22-07-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Pues como ya te han comentado NO SIEMPRE HAY QUE EVITAR LAS VARIABLES GLOBALES. Cuando son necesarias hay que usarlas (como en este caso). Con la puntualización que ha hecho Chris, de que realmene sea global y no ligada al formulario

En mi caso, para esto (y algunas cosas similares) me creo una clase de configuración que almacena todos esos datos genéricos (que deben ser accesibles por toda la aplicación en cualquier momento). Pero sigue siendo lo mismo.

Tengo una instancia de la clase TGConfig que es global y dentro de esa clase TGConfig una serie de datos "globales".
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 22-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo uso una nomenclatura "propia" derivada de la notación húngara de Charles Simonyi, por ejemplo, para las constantes uso este tipo de nomenclatura:

Código Delphi [-]
const
  _CONFIGINI_  : string = 'config.ini';
  _RUTA_BD_    : string = '\BasesDatos\';
Y para las variables globales, similar, pero en minúsculas:

Código Delphi [-]
public
  _iCodEmpresa_   : integer;
  _dFechaTrabajo_ : TDateTime;


De esa manera siempre tengo controlado cada cosa.
Responder Con Cita
  #11  
Antiguo 25-07-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
Pues como ya te han comentado NO SIEMPRE HAY QUE EVITAR LAS VARIABLES GLOBALES. Cuando son necesarias hay que usarlas (como en este caso). Con la puntualización que ha hecho Chris, de que realmene sea global y no ligada al formulario

En mi caso, para esto (y algunas cosas similares) me creo una clase de configuración que almacena todos esos datos genéricos (que deben ser accesibles por toda la aplicación en cualquier momento). Pero sigue siendo lo mismo.

Tengo una instancia de la clase TGConfig que es global y dentro de esa clase TGConfig una serie de datos "globales".
No he leido a detalle todo el hilo pero me quedo con este mensaje.

De entrada no creo que sea "flojera" de los profesores el recomendar no usar variables globales, ni tampoco creo que sea un mito. Las variables globales conviene evitarlas porque hay poco control sobre ellas. Claro que si somos muy ordenados, no debería preocuparnos tanto, pero si todo fuera cuestión de orden para programar, ni siquiera necesitaríamos OOP.

¿Por qué escojo el mensaje de Neftalí para contestar en este hilo? Porque si bien parece estar de acuerdo en el uso de variables globales según qué circunstancias; en la parte subsecuente de su mensaje contradice esto indicando que reune estas variables globales en una clase TGConfig, cosa muy, pero muy distinta a tener una variable global suelta por ahí.

Yo hago algo como lo que menciona oscarac, y que todos parecen haber omitido, y que al, final es similar a lo que hace Neftali. Tengo un datamodule donde abro conexiones, leo valores de incio de algún archivo de configuración e incializo variables "globales", que, en realidad, son propiedades de ese datamodule.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
variables globales pulpin C++ Builder 2 03-04-2008 04:09:28
Uff. variables globales en php.ini Nati PHP 1 26-06-2007 09:02:49
variables globales henrygale Varios 9 06-04-2007 00:47:05
Variables Globales Abel Garcia Firebird e Interbase 8 26-09-2005 15:20:59
Variables globales en PHP JulioGO PHP 3 08-04-2005 14:36:57


La franja horaria es GMT +2. Ahora son las 04:41:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi