Каковы лучшие практики для разработки баз данных с Delphi? - PullRequest
12 голосов
/ 05 июня 2009
  1. Как я могу продуктивно использовать RAD (повторное использование кода). любой образцы, существующие библиотеки, основные сырые генераторы?
  2. Как мне спроектировать ООП? Который шаблоны проектирования для использования для связь, абстрагируясь разные уровни доступа двигателей / дБ (bde-dbexpress-ado), базовый CRUD операции.

Ответы [ 6 ]

4 голосов
/ 05 июня 2009

У меня есть собственная среда Delphi / MySQL, которая позволяет мне очень быстро добавлять «новые экраны». Я не поделюсь этим, но могу описать подход, который я выбрал:

Я использую интерфейс с вкладками с иерархией на основе TFrame. Я создаю вкладку и связываю в ней TFrame.

Я забочусь обо всех грубых подключениях и контроле параллелизма, используя стандартную реализацию хранимой процедуры mysql. CustomerSEL, CustomerGET, CustomerUPD, CustomerDEL и т. Д ...

Моя основная форма содержит панель navbar и панель, содержащую TPageControl

Пример классов в моей иерархии

TFrame TMFrame - мое происхождение, с реализациями интерфейса, захватывающими OnShow, OnHide и некоторые другие особенности

- TWebBrowserFrame --TDataAwareFrame --TObjectEditFrame --TCustomerEditFrame --TOrderEditFrame так далее... --TObjectListFrame --TCustomerListFrame

и т.д ...

и некоторые диалоги ..

TDialog TMDialog --TDataAwareDialog --TObjectEditDialog - TContactEditDialog так далее.. --TObjectSelectDialog --TContactSelectDialog

и т.д ...

Когда я добавляю новый объект для управления, это может быть новым атрибутом клиентов, скажем, мы хотим отслеживать, какие транспортные средства принадлежат клиенту.

создать таблицу CustomerVehicles Я запускаю свой специальный генератор sproc, который создает мои SEL, GET, UPD, DEL проверить эти ...

Получите из базовых классов, которые я упоминал выше, пропустите некоторые элементы управления Добавьте вкладку в TCustomerEdit.

Delphi всегда имеет набор данных в качестве абстрактного слоя, предоставьте его своему графическому интерфейсу через источники данных. Добавьте набор данных в модуль данных клиента и «зарегистрируйте его». Моя собственная пользовательская функция в моем производном классе модулей данных, TMDataModule

Управление безопасностью аналогичным образом осуществляется во фреймворке. Я регистрирую компоненты, которые требуют, чтобы флаг безопасности был видимым или активированным.

Обычно я могу добавить новый объект, построить sprocs, добавить экраны обслуживания в течение часа.

Конечно, это обычно только начало, обычно, когда вы добавляете что-то, вы используете это не только для отслеживания. Если это приложение для гаража, мы хотим добавить транспортное средство, которое клиент привез в гараж, идентифицировать его, чтобы мы могли отслеживать историю. Но даже так, это быстро.

Я пытался заключать субконтракты с молодыми парнями, используя «новые инструменты разработки», и они, кажется, никогда не верят мне, когда я говорю, что могу сделать это в десять раз быстрее с Delphi! Я могу сделать за два часа без ошибок, что, по-видимому, занимает у них два дня, и у них все еще есть ошибки ...

DO - Будьте осторожны, планируя свою VFI! Как уже упоминалось, если вы хотите изменить имя компонента в одном из ваших родительских классов, будьте готовы к неприятностям. Вам нужно будет открыть и «отредактировать» каждого дочернего элемента в иерархии, даже если вы очистите DCU, у вас все равно может быть ад DFM. Уверяю вас, в 2006 году это все еще проблема.

НЕ создавайте один модуль данных монстров

Не спешите с предварительным дизайном, рефакторинг после того, как вы создали тонну иждивенцев, может быть веселым испытанием, но кошмаром, когда вам нужно, чтобы что-то новое заработало быстро!

4 голосов
/ 05 июня 2009

Ну, я настоятельно рекомендую вам использовать Actions (TActionList) при разработке вашего пользовательского интерфейса. Существует множество предопределенных действий, в том числе операции «Следующая / Предыдущая / Вставка / Удалить / Изменить / Обновить», которые можно выполнять с наборами данных, поэтому рекомендуется использовать эти действия и связать их с кнопками / меню в ваших формах. Это предотвращает повторный код для логики пользовательского интерфейса.

Нет необходимости в генераторе CRUD для Delphi !! Добавьте TDataSource, TDBGrid и TActionList в форму, добавьте предварительно определенные действия источника данных в список действий, свяжите эти действия с кнопками или меню, и все готово!

4 голосов
/ 05 июня 2009

Будьте очень осторожны, если вы используете подход «поместить все объекты БД в один большой модуль данных» (или «несколько больших модулей данных» в огромных приложениях). Это может сделать ваш проект с модулем данных настолько большим, что вам придется использовать монитор HD, чтобы увидеть все TXDataset в этом модуле данных
Итог: переключитесь на использование специализированных классов для бизнес-логики вместо больших глобальных модулей данных. Используйте глобальные модули данных с логикой ТОЛЬКО в очень маленьких проектах.

3 голосов
/ 07 июня 2009

Для больших приложений я использую инфраструктуру персистентности объектов tiopf . Это позволяет мне иметь дело с объектами, а не с наборами данных и легко менять базы данных. Большая часть моей бизнес-логики переходит в модель бизнес-объектов (BOM), и мои формы довольно глупы. У tiopf есть несколько способов подключения спецификации к формам; элементы управления с сохранением, Ttidataset для элементов управления с учетом данных и классы Mogel Gui Mediator для подключения к обычным элементам управления.

Для небольших и быстрых приложений я просто использую модули данных и компоненты базы данных. Основные вещи, которые нужно запомнить:

  • Поместите как можно больше кода в модули данных (и как можно меньше в формы).
  • Есть ли несколько модулей данных с разбивкой по функциям, например, модуль электронной почты, модуль дохода, модуль выставления счетов ...
  • Тест, тест, тест
2 голосов
/ 05 июня 2009

Я бы взглянул на Аннотация данных от Remobjects.

2 голосов
/ 05 июня 2009

Использовать VFI (визуальное наследование форм). Разработать стандартную форму БД. Например, пустой DataSet, DataSource, PageControl, состоящий из 2 листов. Сначала будет пусто, позже вы добавите элементы управления для редактирования данных в дочерних формах. Добавьте DBGrid на второй лист. Осторожно, это не ООП, хотя это легко и быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...