![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Когда создать модуль данных
PoetOfDelphi © (2006-02-16 13:30:00)Уважаемые, делфисты с опытом!
Пишу приложение для работы с БД. Хочется мне, чтобы в моём проэкте всё было рационально и разложено по полочкам.
Делфи осваивал в сжатые сроки, поэтому в голове моей сумбур. Где-то когда-то вроде бы читал, что модуль данных нужно создавать в последнюю очередь (Apllication.CreateForm(TDataModule)). Я так и сделал. Но это вызвало определённую путаницу в виде перекрёстных ссылок между модулями. Теперь мне начальница грит (сама она такой же программер как и я, только стажа побольше :) ), что в нескольких проэктах нашей фирмы модуль данных создаётся как раз самым первым, а потом из него данные загружаются в остальные формы. При этом у меня тоже возникает путаница, но уже другая. Вправьте мне мозги, пожалуйста или может линкочку на какую-нть статейку, а? Копаться в томудах нет времени...
msguns (2006-02-21 13:44:00) [1]>PoetOfDelphi © (21.02.06 12:56) [32]
>Я имел ввиду, что чтобы назначить обработчик, описанный в главной форме событию Модуля Данных, нужно в разделе uses Модуля Данных сослаться на модуль главной формы... Или нет?
ИМХО, концептуально неверный подход. Код в главной форме (да и любой другой) должен ссылаться на объект, а где этот объект находится, в датамодуле, другом юните или вообще "с луны свалился", процедуре/функции должно быть равнобедренно.
Johnmen (2006-02-21 13:41:00) [2]
> PoetOfDelphi © (21.02.06 12:06) [30]
> Работает. Но недостаток закл. в том, что это событие возникает
> када надо и када не надо.
Оно ВСЕГДА "возникает", "когда надо". Видимо, ты не так его пользуешь...
PoetOfDelphi (2006-02-21 13:36:00) [3]Спасибо. Надо переварить... :)
Плохиш (2006-02-21 13:19:00) [4]procedure TForm1.MyStart(Sender: TObject);
begin
...
end;
procedure TForm1.MyFunc;
begin
DM.OnMyStart := MyStart;
DM.Refresh;
end;
..........
procedure TDM.Refresh;
begin
if Assigned(FOnMyStart) then FOnMyStart(self);
end;
PoetOfDelphi (2006-02-21 12:56:00) [5]Я имел ввиду, что чтобы назначить обработчик, описанный в главной форме событию Модуля Данных, нужно в разделе uses Модуля Данных сослаться на модуль главной формы... Или нет?
Плохиш (2006-02-21 12:14:00) [6]
> Но не приходим ли мы опять к пресловутому юзанью модуля
> главной формы модулем DM? Ведь обработчик,
> который вы предлагаете назначить событию DM, описывается
> в главной форме, стало быть её модуль должно быть видно
> из DM...
Т.е. из этого вытекает, что когда ты создаёшь у TForm1 какой-либо обработчик, то модуль Unit1 включается в uses-секцию модуля forms?
PoetOfDelphi (2006-02-21 12:06:00) [7]Спасиба, господ а! :).
Мой кругозор, благодаря вам расширился.
> PoetOfDelphi © (17.02.06 16:42) [16]
> Я, например, в событии OnStateChange,описанном в DM,изменяю
> сосотояние Control-ов главной формы,в соответствии с новым
> состоянием датасета.( Как же подругому отразить на форме
> изменения, произошедшие в таблицах?)
Это всё я сделал в событии OnUpDate ActionLista. Воспользовался советом
Johnmen © (17.02.06 17:03) [26]
>PoetOfDelphi © (17.02.06 16:56) [25]
Проверяется в OnUpdate. Насколько помню в F1 всё подробно описано...
Работает. Но недостаток закл. в том, что это событие возникает када надо и када не надо.
> В DM создаёшь, новое свойство типа TNotifyEvent, к примеру.
> В главной форме создаёшь обработчик для этого события.
> При создании главной формы присваиваешь свойству в DM созданный
> обработчик.
> При обработке события OnStateChange проверяешь и если свойство
> не nil, то выполняешь обработчик.
-Это мне больше нравится. Изменение сосотояния контролов гланой формы происходит по факту изменения в таблицах. Собственно, до этого у меня так и было, только в профиль (:)) Но не приходим ли мы опять к пресловутому юзанью модуля главной формы модулем DM? Ведь обработчик,
который вы предлагаете назначить событию DM, описывается в главной форме, стало быть её модуль должно быть видно из DM...
Кстати, как перекрёстные ссылки как-то влияют на качество работы приложения? Или они просто затрудняют сопровождение и понимание кода?
Гаврила (2006-02-17 17:37:00) [8]
> Плохиш ©
> В DM создаёшь, новое свойство типа TNotifyEvent,
Да, собственно, можно и не создавать нового события, событие то уже есть (у соответствующего компонента в DataModule)
просто присвоить на него метод главной формы, и всех делов
MBo (2006-02-17 17:31:00) [9]>PoetOfDelphi
На мой взгляд, стоит почитать о парадигме программирования MVC (Model-View-Controller).
Грубо говоря, хранитель данных (Model) предоставляет минимальный интерфейс для выдачи или поступления данных, он не знает, кто и как ими распоряжаются, а другие участники процесса не знают, как данные хранятся.
Плохиш (2006-02-17 17:16:00) [10]
> PoetOfDelphi © (17.02.06 16:42) [16]
> Я, например, в событии OnStateChange,описанном в DM,изменяю
> сосотояние Control-ов главной формы,в соответствии с новым
> состоянием датасета.( Как же подругому отразить на форме
> изменения, произошедшие в таблицах?)
В DM создаёшь, новое свойство типа TNotifyEvent, к примеру. В главной форме создаёшь обработчик для этого события. При создании главной формы присваиваешь свойству в DM созданный обработчик.
При обработке события OnStateChange проверяешь и если свойство не nil, то выполняешь обработчик.
Johnmen (2006-02-17 17:03:00) [11]>PoetOfDelphi © (17.02.06 16:56) [25]
Проверяется в OnUpdate. Насколько помню в F1 всё подробно описано...
PoetOfDelphi (2006-02-17 16:56:00) [12]
> Johnmen © (17.02.06 16:53) [23]
Я использую ActionList.
А от куда подаётся сигнал проверять состояние НД?
Mikhail (2006-02-17 16:53:00) [13]Это я Joinmeny
Johnmen (2006-02-17 16:53:00) [14]>Во-вторых, как сделать то, что я описал по-другому?
В гл.форме д.б. механизм изменения отображения контролов в зависимости от различных параметров, в т.ч. и от состояния набора данных.
Такой механизм предоставляется в частности классом TActionList.
PoetOfDelphi (2006-02-17 16:51:00) [15]
> Более содержательный наезд приветствуется :)
Это Вы о чём?
Mikhail (2006-02-17 16:50:00) [16]Более содержательный наезд приветствуется :)
PoetOfDelphi (2006-02-17 16:48:00) [17]Во-первых, почему не ст оит?
Во-вторых, как сделать то, что я описал по-другому?
Johnmen (2006-02-17 16:45:00) [18]>Это есть uses'нье юнита главной формы?
Да.
Ega23 (2006-02-17 16:45:00) [19]
> Я, например, в событии OnStateChange,описанном в DM,изменяю
> сосотояние Control-ов главной формы,в соответствии с новым
> состоянием датасета.( Как же подругому отразить на форме
> изменения, произошедшие в таблицах?)
> Это есть uses'нье юнита главной формы?
Это есть uses'нье юнита главной формы. Но делать так - не стоит.
Johnmen (2006-02-17 16:44:00) [20]>Mikhail (17.02.06 16:16) [15]
Почему?