Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Solicito recomendación sobre formas de programar (https://www.clubdelphi.com/foros/showthread.php?t=42753)

Monxy 21-04-2007 22:48:04

Solicito recomendación sobre formas de programar
 
Saludos colegas. No estoy seguro de si el título del hilo les da una idea clara de la intención de este hilo, pero lo que quiero preguntar es lo siguiente:
Al desarrollar un aplicación, por lo general reutilizo formularios (dentro de la misma aplicación) para diferentes funciones en las que sólo cambian algunos controles. Por ejemplo, digamos que en la aplicación existe la función de dar de alta profesores, así como de dar de baja y de modificar sus datos. Para estas tres funciones yo utilizo un mismo form, sólo hago visibles o invisibles algunos botones y otros controles, y en algunos casos sólo cambio el caption de los mismos, y dentro del código del evento click (por ejemplo) tomo la decisión de qué líneas ejecutar en función del caption.
¿Creen ustedes que esto es recomendable? O, ¿es más recomendable crear un form con su propio conjunto de controles para cada función?
Gracias por su tiempo :)

dec 21-04-2007 22:55:58

Hola,

Creo que es una cuestión de cómo lo veas en cada caso. Si, por ejemplo, por reutilizar formularios vas a tener que hacer virguerías codificando... pues no sé yo si compensa: al fin y al cabo un IDE como el de Delphi está para utilizarlo, porque se gana tiempo, por ejemplo.

Así que no sé yo si se podría dar una respuesta general... más bien creo que no. Dependerá de cada caso y de cómo lo veas. Lo que tal vez pueda decirse es que las dos formas son válidas, yo por lo menos no veo nada de malo en una u otra. Todo lo contrario.

Monxy 21-04-2007 23:35:33

Ya veo, tiene sentido. Gracias.

Lepe 22-04-2007 00:39:59

Lo más fácil es crear una variable (o propiedad) que indique qué se debe mostrar, por ejemplo, lo típico:
Código Delphi [-]
type TModo = (mInsertar, mEditar, mMostrar);

form1 = class(tform)
private
  FModo:TModo
  procedure SetModo(Value:TModo);
public 
 property Modo:TModo read FModo write SetModo;
end;


procedure TForm1.SetModo(value:TModo);
begin
  
  if Value = mInsertar then
  begin 
    // ocultar Edits, cambiar captions, etc.
  end
  else if Value = mEditar then
  begin
   
  end;
  FModo := Value;
end;

Ahora después de crear ese Form, asignas un valor a la propiedad Modo y listo, ya tienes todos los captions y demás hecho. Por otra parte tienes la variable FModo que puedes preguntar si está en modo edicion, inserción, etc; como ves mucho más cómodo que preguntar por un caption.

Código Delphi [-]
  Form1 := Tform1.Create(Application);
  Form1.Modo := mInsertar;
  Form1.Show;

Saludos

Monxy 22-04-2007 00:44:06

Ciertamente es más cómodo y más práctico. Por desgracia, la escuela donde estudio no enseña a programar de esta manera en delphi, sino a usar únicamente lo que ya contiene, sin nuevas implementaciones. Es bueno estar aquí, se aprende bastante.
Gracias compañero.

roman 22-04-2007 07:02:32

Cita:

Empezado por dec
Si, por ejemplo, por reutilizar formularios vas a tener que hacer virguerías codificando... pues no sé yo si compensa

En mi opinión, el ejemplo de Lepe no necesariamente concuerda con lo que se pregunta. Su ejemplo trata de un formulario en donde lo que cambia no son los controles, sino el modo en que se usan. Ciertamente, para editar los datos de un cliente, da lo mismo si se trata de uno existente o de un cliente nuevo y yo haría algo similar.

Pero cuando hablamos de ocultar y/o inhabilitar controles dependiendo del contexto, realmente estamos cambiando de formulario, así sea virtualmente. Visto en un ejemplo aislado puede parecer razonable, pero cuando tales situaciones comienzan a multiplicarse en la aplicación, corre uno el riesgo de tener que hacer auténticas virguerías en aras del reuso de formularios.

A mi me sucedió eso, precisamente. Me sentí muy 'listo' reusando formularios, ¡caramba! ¡sólo tengo que hacer unas cuantas comprobaciones y habilitar/ocultar lo que no haga falta. Al final, las comprobaciones eran de miedo, la lógica de la aplicación se mezclaba bien y bonito con la interfaz de usuario, en fin, una pesadilla.

Luego me percaté que la mejor solución era, en efecto, la reutilización de formularios, pero no por la via de ocultar/inhabilitar controles, sino por la de la herencia visual de formularios.

Digamos que tenemos que capturar los datos de un cliente, pero hay dos tipos de clientes, normales y preferenciales, y, si bien muchos datos son comunes, hay otros que dependen del tipo de cliente. En lugar de colocar todos los controles, comunes y no comunes, en un sólo formulario, ocultando los que no se requieran; viene mejor hacer una formulario base con los controles comunes y derivar de él dos formularios, uno por cada tipo de cliente:

Código:

              TfrmDatosClientes
                      ^
                      |
          -----------+-------------
          +                      +
          |                      |
TfrmDatosClienteNormal TfrmDatosClientePreferencial

No sé yo, si lo que comento se ajuste a lo que se requiere, pero sólo digo que hay que tener cuidado con el reuso de formularios.

// Saludos

Monxy 22-04-2007 21:30:17

Cita:

Empezado por roman
En mi opinión, el ejemplo de Lepe no necesariamente concuerda con lo que se pregunta. Su ejemplo trata de un formulario en donde lo que cambia no son los controles, sino el modo en que se usan.



No sé yo, si lo que comento se ajuste a lo que se requiere, pero sólo digo que hay que tener cuidado con el reuso de formularios.



Ambos ejemplos son válidos para mi pregunta, dado que he reutilizado formularios tanto para habilitar/mostrar diferentes controles como para utilizar de manera distinta los mismos.

Y tienes razón, hay veces en que la interfaz se mezcla con la lógica y ocasiona enredos bastante difíciles. Supongo que es válido hacerlo de la manera habilitar/mostrar únicamente si los cambios son simples y no complican el entendimiento del flujo del código. Pero si lo hacen, suena más recomendable lo que tú propones.



Gracias por tu recomendación compañero.


La franja horaria es GMT +2. Ahora son las 09:48:26.

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