Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Когда создать модуль данных


Страницы:   1 2

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]

Почему?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо