DataModule, созданный перед главной формой - PullRequest
5 голосов
/ 14 января 2010

Некоторые разработчики приложений баз данных предпочитают создавать модуль данных перед основной формой, редактируя исходный файл проекта следующим образом

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

Вопрос - почему? Какие плюсы и минусы?

Ответы [ 5 ]

15 голосов
/ 14 января 2010

Очевидная причина в том, что для главной формы требуется модуль данных для его настройки. Например, если есть что-то, на что ссылается основная форма в своем OnCreate, то, конечно, модуль данных должен быть в первую очередь готов.

В противном случае, это не имеет значения.

6 голосов
/ 14 января 2010

Я согласен с ответом Мейсона, потому что он объясняет, почему люди могут это делать. Тем не менее, я считаю, что это плохой подход, потому что он скрывает зависимость в коде, который поддерживается IDE. По моему мнению, модуль данных должен быть удален из списка автоматического создания, и он должен быть создан в методе OnCreate основной формы.

5 голосов
/ 14 января 2010

На самом деле есть два лагеря, и оба являются правильными.

Первый позволяет приложению управлять ресурсом каждого модуля формы / данных. В этом случае, если основная форма использует модуль данных, его необходимо создать, прежде чем его можно будет использовать. Это хорошо работает для небольших приложений, но при загрузке больших приложений с несколькими формами возникают накладные расходы на загрузку ... однако после загрузки приложения отображение формы происходит практически мгновенно, поскольку она уже создана в памяти. Поскольку каждая форма / ресурс уже создана, при запуске приложения также возникает большой объем памяти. Этот метод используется по умолчанию, и Delphi «ведет» вас, когда вы добавляете в приложение новые формы / модули данных. Если вы не используете модуль данных в OnCreate основной формы, то он может быть ниже в порядке создания, поскольку он не будет вызываться до тех пор, пока не будет запущен Application.Run.

Второй лагерь хочет обработать создание и уничтожение каждого модуля формы / данных (как правило, для всех форм, кроме MainForm). Преимущество этого метода заключается в том, что приложение будет загружаться быстрее и потреблять меньше памяти сразу после запуска. Обычно в этом сценарии это основная форма (или другие формы), которая полностью управляет жизненным циклом каждого модуля формы / данных, который они используют. Этот метод лучше всего подходит для больших приложений с множеством форм.

0 голосов
/ 24 февраля 2014

MainForm не отображается до создания всех других компонентов. Так что, в принципе, вы будете ждать в обоих случаях, сначала создается модуль данных о погоде или нет. Если ваша сетка находится в главной форме, то вы можете столкнуться с проблемами при попытке использовать что-то подобное из события таблицы (или запроса) модулей данных (после открытия):

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

Причина очевидна: сетка еще не создана .. Должен признать, я также сначала создаю модуль данных. Но есть причины, подобные той, что я только что описал, когда это непрактично.

0 голосов
/ 14 января 2010

Просто потому, что это самый ленивый способ убедиться, что контент DataModule доступен для MainForm. Если у вас есть только один DataModule, проблем нет.

...