2010-01-14 11 views
5

Algunos desarrolladores de aplicaciones de bases de datos prefieren crear un módulo de datos antes de forma principal mediante la edición del archivo de origen proyecto como estemódulo de datos creadas antes de forma principal

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TDM, DM); 
    Application.CreateForm(TMainForm, MainForm); 
{...} 
    Application.Run; 
end. 

La pregunta es - ¿por qué? ¿Qué son los pros y los contras?

+1

No hay controlador OnCreate o de lo contrario. MainForm puede hacer referencia a las fuentes de datos declaradas en el módulo de datos, pero afaik se resuelven con éxito sin cambiar el orden de creación. – kludg

+2

Esto no significa que deba editar el origen del proyecto. El orden de creación de los módulos de datos y formularios se puede cambiar en el diálogo de opciones del proyecto. El primer formulario creado será el formulario principal, pero puede haber módulos de datos creados antes de eso. También puede consultar mi respuesta a esta pregunta: http: // stackoverflow.com/questions/382527/delphi-app-initialization-best-practices-approach/383197 # 383197 –

+0

a Uwe Raabe - Sé que hay muchas opciones. Yo mismo a veces compilo un proyecto de prueba de unidad GUI sin ningún tipo de formulario. – kludg

Respuesta

15

La razón obvia sería si el formulario principal necesita el Módulo de datos para su configuración. Por ejemplo, si hay algo allí que el formulario principal hace referencia en su OnCreate, entonces, por supuesto, el módulo de datos debería estar listo primero.

De lo contrario, realmente no importa.

+0

Estoy de acuerdo, también visto para generar menús dinámicamente. – Eduardo

6

Estoy de acuerdo con la respuesta de Mason porque explica por qué las personas pueden hacer esto. Sin embargo, creo que este es un mal enfoque porque oculta la dependencia en el código que mantiene el IDE. En mi opinión, el módulo de datos debe eliminarse de la lista de creación automática y debe crearse en el método OnCreate del formulario principal.

+0

No estoy de acuerdo con que el módulo de datos deba crearse mediante el método OnCreate de MainForm y creo que es un estilo incorrecto. En cambio, crearía primero la forma principal SIEMPRE, y el módulo de datos en segundo lugar, y no colocaría CUALQUIER código dentro del formulario principal que dependa de CUALQUIER otra forma, durante su creación o destrucción. En cambio, escribiría funciones de inicialización separadas, e invocarlas por código que escribo, para que ocurra en algún momento. No me gustan los eventos de FormCreate que hacen mucho más que crear objetos locales que son campos privados/protegidos dentro del formulario. Cualquier otra cosa no debería estar en FormCreate. –

0

Simplemente porque es la forma más sencilla de garantizar que el contenido de DataModule esté disponible para MainForm. Si solo tiene un DataModule, no hay problema.

5

Realmente hay dos campamentos en este caso, y ambos son correctos.

La primera permite que la aplicación administre la vida útil de cada formulario/módulo de datos. En este escenario, si el formulario principal utiliza el módulo de datos, entonces debe crearse antes de poder usarlo. Esto funciona bien para aplicaciones pequeñas, pero hay una sobrecarga de carga cuando se llega a aplicaciones más grandes con múltiples formularios ... sin embargo, una vez que se carga la aplicación, mostrar un formulario es casi instantáneo ya que ya se ha creado en la memoria. Debido a que cada formulario/recurso ya está creado, también hay un gran impacto de memoria al ejecutar la aplicación. Este método es el predeterminado que Delphi "guía" también cuando agrega nuevos formularios/módulos de datos a la aplicación. Si no usa el módulo de datos en OnCreate de la forma principal, puede ser más bajo en el orden de creación ya que no se invocará hasta después de que se inicie Application.Run.

El segundo campo quiere manejar la creación Y destrucción de cada formulario/módulo de datos en sí (generalmente para todas las formas que no sean MainForm). La ventaja de este método es que la aplicación se cargará más rápido y consumirá menos memoria inmediatamente después del inicio. En general, en este escenario, es la forma principal (u otras formas) que gestiona por completo el ciclo de vida de cada formulario/módulo de datos que utilizan. Este método funciona mejor para aplicaciones más grandes con muchas formas.

0

MainForm no se muestra antes de que se creen todos los demás componentes. Entonces, básicamente, esperará en ambos casos, el módulo de datos meteorológicos se crea primero o no. Si su red está en el formulario principal entonces es posible que se mete en problemas cuando se trata de usar algo como esto desde la mesa de módulos de datos (o de consulta) evento (después de abierto):

cxGrid1DBTableView1.Controller.TopRowIndex :=0; 
cxGrid1DBTableView1.DataController.FocusedRowIndex := 0; 

La razón es obvia: La grid aún no está creado ... Debo admitir que también creo datamodule primero. Pero hay razones, como la que acabo de describir, cuando no es práctico hacer eso.

Cuestiones relacionadas