Хммм. Большой вопрос, этого материала нет в руководствах :( Для этого на самом деле потребуется книга. Однако, если вы начинаете новый крупный проект? Мой список советов, после 10 лет работы с Delphi, будет выглядеть следующим образом:
В целом
Подумайте, прежде чем начать, какие функциональные возможности вам нужны для версии 1. Но не игнорируйте вероятность наворотов версий 2 и 3.
Не используйте элементы управления с учетом данных, за исключением простых отдельных утилит или базовых экранов ввода данных.
Обоснование:
- Они немедленно нарушают разделение базы данных вашего GUI <->.
- Они немного разочаровали вас в тесте на удобство использования.
- Они поощряют код Спагетти
Не используйте какие-либо стандартные или сторонние элементы управления, включая формы, фреймы или модули данных. Сначала создайте свои собственные библиотеки производных классов - даже если вы не добавляете никаких функциональных возможностей в начале и всегда используете эти классы.
Обоснование:
- Полный контроль поведения вашего приложения.
- Упрощает прямую совместимость.
- Предоставляет вам полную свободу вводить новые свойства / функции в любой точке вашего нового дерева компонентов без необходимости редактирования всех ваших диалогов, форм или объектов.
Насколько возможно, создать все как объект со свойствами, которые имеют геттеры, в которых вы скрываете сложность и сеттеры, только если они не могут только для чтения. Дисциплинируйте себя, чтобы всегда использовать свои собственные свойства. Обман с быстрой общедоступной переменной обычно всегда приводит к тому, что вы позже воссоздаете его как свойство.
Дизайн базы данных - почитайте книгу:)
GUI <-> разделение базы данных.
Поскольку приложению придется взаимодействовать с данными, то 100% разделение не представляется возможным. Вместо этого ваши базовые объекты, вероятно, будут определять как минимум:
- Механизм для извлечения или загрузки данных
- Механизм для редактирования этих данных
- Механизм сохранения данных
- Механизм отображения данных.
Это я бы назвал слабосвязанной.
Для каждой таблицы данных или группы тесно связанных таблиц создайте отдельный модуль данных с запросами только для чтения, с возможностью записи и т. Д. Сохраняйте максимально простой SQL-запрос - я переместил свое последнее приложение из Oracle в MYSQL за 2 дня - 150 таблиц со связанными объектами и редактировать кадры :). Первоначально свяжите их все с одним объединенным соединением также в своем собственном модуле данных.
Похоже, вы уже поняли, что списки, в частности списки TObjectLists, являются вашими друзьями. Опять же - найдите свой собственный для каждого типа объекта, который вам нужен. Я на самом деле скрываю реальные списки внутри более простых объектов. Предоставление свойств Items и Count тривиально. Затем вы добавляете больше функциональности к базовому элементу, используя внутренний список по мере необходимости. Отсюда списки списков являются простым шагом и почти естественным образом следуют структуре данных базы данных, которые они представляют.
Вы можете получить более изощренный с этим подходом, фактически сохраняя типы списков, которые различные части вашего приложения используют / нуждаются также в Базе данных. Затем вы можете создавать правильные списки на лету, при этом приложение не знает, что в них находится - сами списки и объекты должны на этом этапе разработки содержать все функции, необходимые для управления / загрузки / сохранения и отображения собственных данных. :). Это также можно распространить на функции, которые выполняет список. Я использую несколько базовых типов списков, которые показывают простое число и элементы - в моем случае у них есть около 50 потомков.
Работая таким образом, ваш проект может накапливать большое количество файлов, но вы можете положиться и доверять Delphi - модель OO очень сильная и редко попадает в ловушку.
Если вы будете следовать большей части этого, ваше основное приложение окажется загрузчиком списка, и это все :) В моем последнем случае основная функциональность занимает всего около 100 строк кода, но то, что оно запускает, довольно сложно.
Наконец, все это - большая работа :( Правильного понимания с первого раза просто не произойдет, давайте будем честными, поэтому будьте готовы к компрометации вашей прекрасной объектной модели, чтобы получить приложение на улице, но делайте БОЛЬШИЕ комментарии и почему ты это сделал и как исправить это позже.
Удачи :)