![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Когда создать модуль данных
PoetOfDelphi © (2006-02-16 13:30:00)Уважаемые, делфисты с опытом!
Пишу приложение для работы с БД. Хочется мне, чтобы в моём проэкте всё было рационально и разложено по полочкам.
Делфи осваивал в сжатые сроки, поэтому в голове моей сумбур. Где-то когда-то вроде бы читал, что модуль данных нужно создавать в последнюю очередь (Apllication.CreateForm(TDataModule)). Я так и сделал. Но это вызвало определённую путаницу в виде перекрёстных ссылок между модулями. Теперь мне начальница грит (сама она такой же программер как и я, только стажа побольше :) ), что в нескольких проэктах нашей фирмы модуль данных создаётся как раз самым первым, а потом из него данные загружаются в остальные формы. При этом у меня тоже возникает путаница, но уже другая. Вправьте мне мозги, пожалуйста или может линкочку на какую-нть статейку, а? Копаться в томудах нет времени...
PoetOfDelphi (2006-02-17 16:42:00) [21]
> Грубо говоря, DM не должен uses'ать др.юниты проекта.
:)
Такс. Понятно.
Я, например, в событии OnStateChange,описанном в DM,изменяю сосотояние Control-ов главной формы,в соответствии с новым состоянием датасета.( Как же подругому отразить на форме изменения, произошедшие в таблицах?)
Это есть uses'нье юнита главной формы?
Mikhail (2006-02-17 16:16:00) [22]
> Johnmen ©
Ну зря Вы так.
Johnmen (2006-02-17 16:06:00) [23]>Mikhail (17.02.06 14:50) [11]
?
Mikhail (2006-02-17 15:22:00) [24]
> Johnmen © (17.02.06 15:06) [12]
?
Johnmen (2006-02-17 15:06:00) [25]
MainLabel :
try
LastMessages.Free;
ViewTexts.Terminate;
except
goto MainLabel;
end;
Mikhail (2006-02-17 14:50:00) [26]
program HotLine;
uses
SysUtils,
Forms,
MainFrm in 'MainFrm.pas' {MainForm},
DataUnt in 'DataUnt.pas' {Data: TDataModule},
SplashFrm in 'SplashFrm.pas' {SplashForm},
LoginFrm in 'LoginFrm.pas' {LoginForm},
ItemEditFrm in 'ItemEditFrm.pas' {ItemEditForm},
ItemSelectFrm in 'ItemSelectFrm.pas' {ItemSelectForm};
{$R *.res}
var
SplashForm: TSplashForm;
begin
Application.Initialize;
Application.CreateForm(TData, Data);
if Data.Login then
try
SplashForm := TSplashForm.Create(Application);
try
SplashForm.Show;
SplashForm.Repaint;
Data.OpenDatasets(SplashForm.StatusMessage);
Application.CreateForm(TMainForm, MainForm);
...
MainForm.UpdateControls;
finally
SplashForm.Free;
end;
Application.Run;
except
Application.Terminate;
end
else
begin
Data.Free;
Application.Terminate;
end
end.
Ega23 (2006-02-17 14:49:00) [27]
program Personnel;
uses
Forms,
Sysutils,
WinProcs,
windows,
StrUtils,
UDMpas in 'UDMpas.pas' {DMpas: TDataModule},
UMain in 'UMain.pas' {FMain},
KedrClntDll in 'KedrClntDll.pas',
.........
var hnd:THandle;
ss:string;
begin
ss:=ExtractFileName(paramstr(0) );
hnd:=CreateMutex(nil, false, PChar(ss) );
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Beep(100,200); //MessageBeep ->in WinProcs
ReleaseMutex(hnd);
Exit;
end;
Application.Initialize;
if not FindCmdLineSwitch('s',[],True) then UseSplash:=True;
if UseSplash then ShowSplashFormDLL(Application,' Подсистема "Бюро пропусков"');
Application.HelpFile:='Personnel.chm';
Application.CreateForm(TDMpas, DMpas);
if not DMpas.LoginOK then
begin
DMpas.Free;
DMpas:=nil;
ReleaseMutex(hnd);
Exit;
end;
Application.ProcessMessages;
Application.CreateForm(TFMain, FMain);
Application.CreateForm(TFExtSearch, FExtSearch);
// Application.CreateForm(TFPersReport, FPersReport);
if UseSplash then FreeSplashFormDLL;
Application.Run;
end.
Johnmen (2006-02-17 13:49:00) [28]
> msguns © (17.02.06 12:06) [7]
> Даже юнит главной формы и юниты с коллекциями процедур и
> функций ?
wal уже ответил
:)
wal (2006-02-17 12:18:00) [29]
> Даже юнит главной формы и юниты с коллекциями процедур и
> функций ?
А зачем DM-у вообще знать о главной форме? Его задача - предоставлять данные, а кому их представлять - не его дело, кому надо, тот и возьмет. А вот коллекции процедур и функций - это пожалуйста, если, опять же эти процедуры и функции не имеют различий от того, кто их вызывает.
С уважением.
msguns (2006-02-17 12:06:00) [30]>Johnmen © (16.02.06 13:45) [4]
>Грубо говоря, DM не должен uses'ать др.юниты проекта.
Даже юнит главной формы и юниты с коллекциями процедур и функций ?
Johnmen (2006-02-16 14:16:00) [31]>А что это даёт?
Это даёт п.2 из [1], что даёт в свою очередь отсутствие
"определённую путаницу в виде перекрёстных ссылок между модулями." и "путаница, но уже другая"
:)
PoetOfDelphi (2006-02-16 14:11:00) [32]
> DM не должен uses'ать др.юниты проекта
А что это даёт?
Johnmen (2006-02-16 13:45:00) [33]Грубо говоря, DM не должен uses'ать др.юниты проекта.
PoetOfDelphi (2006-02-16 13:41:00) [34]
> 2. DM ничего не должен знать про способы представления его
> информации
Что это значит? Можно немножко подробнее?
Digitman (2006-02-16 13:38:00) [35]
> PoetOfDelphi © (16.02.06 13:30)
Важно понимать следующее:
- объект либо существует (был создан) либо не существует в тот или иной момент времени ... DataModule-объект - не исключение.
- обращения к методам/св-вам объекта должно осущ-ся в соответствии с его threading-safe-моделью.
Johnmen (2006-02-16 13:34:00) [36]1. DM первым
2. DM ничего не должен знать про способы представления его информации