Перейти к содержанию
Fire Monkey от А до Я
  • 0

Где располагать код Bootstrapper?


SergeyIT

Вопрос

Главный класс приложения - TApplication. В языках C#, Java используют этот класс для управления жизненным циклом объектов, которые не относятся к UI. Здесь, как правило, создаются различные хранилища, менеджеры, решается задача внедрения зависимостей.

У меня, как у человека, влюбившегося в современный Object Pascal после другого... опыта, возникает вопрос, как правильно решить эту задачу, точнее сказать, где именно ее решать? Вмешательство в код вида

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

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

Вопрос: Как правильно инициализировать приложение с возможностью создания менеджеров на уровне TApplication и передачи в конструктор формы важных параметров?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

Если я правильно понял Вас, то можно использовать

 

секции initialization она выполняется при Application.Initialize;

можно работать с TApplication, но пока нельзя работать с формами. т.к. они еще не создались

unit uMain;

interface

uses ...

var
  aClass: TmyClass; // например, хранит важные параметры

implementation

initialization
  aClass := TmyClass.Create;

finalization
  aClass.Free;
Ссылка на комментарий
  • 0

аналогично
у меня почти всегда есть юнит типа UOptions.pas где лежит глобальная переменная options:TOptions
и в классе TOptions считывание/запись настроек из файлов, интернета и т.д.

initialization
  options:= TOptions.Create;

finalization
  Options.free
  Options:=NIL;
Ссылка на комментарий
  • 0

Спасибо. Элегантно! На уровне языка иметь специальный блок инициализации. Читал, но еще не успел опробовать, теперь знаю.
А каковы традиции в передаче зависимостей форме?

Виртуальность конструкторов озадачила мышление. После других языков. Главное аккуратно этим пользоваться.

Быть может просто завести метод в форме вроде Inject или Init?

Но возникает вопрос где его можно вызвать, если зависимость создается на уровне TApplication, а общедоступных (статических или коассовых по OP) свойств,

методов заводить не хочется?

Ссылка на комментарий
  • 0
  • Модераторы

переопределить конструктор и ничего не нужно выдумывать нового

//TForm1
.....
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
....

constructor TForm1.Create(AOwner: TComponent);
begin
  inherited Create(Owner);
  // забираем данные из aClass
end;

Ссылка на комментарий
  • 0

оговорюсь, иногда, при осознанном выборе...

 

Я чаще всего не смешиваю Create и Init

Чем сложнее форма, тем это более выгодно.

Например, если это форма-диалог, и туда передается объект для редактирования, и потом еще настраивается видимость нескольких элементов в зависимости от места вызова...

Но для общего случая согласен

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...