![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пример работы с базой (хочу идеальный код) [D7, IB6.x]
Dust © (2006-06-03 13:41:00)Имеет ли смысл всю работу с базой переносить в дата-модуль?
стоит ли описывать класс типа TMyDatabase, и тд и тп...?
Курдль (2006-06-05 11:44:00) [1]
> хочу идеальный код
Идеальный - не получится. Если хотите оптимальный - надо много читать.
Рекомендую почитать про GRASP и GoF. (Ларман, Гамма и т.п.) Как раз там объясняют, как правильно "делить" программы на модули.
atruhin (2006-06-03 16:26:00) [2]
> 1-да, это логичней, чем размазывать его по всем модулям.
Известный вариант, но есть недостатки, в достаточно большом проекте этот модуль может получится огромных размеров, плюс все модули должны иметь на него ссылки, затрудняется работа в комманде.
Есть другой вариант, главное окно предоставляет интерфейс через который можно получить коннект к БД, транзакциям и т.д., а также управляет созданием закрытием окон. Например по имени класса окна:
FormClass := GetClass(ClassName);
if Assigned(FormClass) then begin
WinClass := TfrmAbstractChild(FormClass.NewInstance);
(WinClass as ICreateObject).Init(ObjID, self ....);
WinClass.Create(self);
Окно получает ссылку на документ, с которым должно работать и ссылку на интерфейс. Вся работа с БД НЕОБХОДИМАЯ ЭТОМУ ОКНУ осуществляется в нем. В целом окно ни чего не знает о других окнах, включая главное, а оно не знает о дочерних. В таком варианте отдельные окна могут разрабатывать разные люди, также очень легко олаживать модифицировать т.к. мы имеем небольшие абсолютно независимые модули.
DSKalugin (2006-06-03 15:26:00) [3]1-да, это логичней, чем размазывать его по всем модулям. Под кнопками и другими элементами управления должны быть только процедуры управления ходом выполнения программы и вызовы готовых процедур обращения к БД, опи санных в датамодуле.
2-он уже описан в компонентах прямого доступа IBObjects, FibPlus, IBX, dbExpress. Так что достаточно воспользоваться готовым, например
MyDatabase: TpFIBDatabase;