Как/если реорганизовать программу Delphi с использованием только форм и модулей данных
После нескольких лет кодирования Delphi-программы как непроверяемый код в формах и datamodules, включая глобальные переменные, и только классы являются самими формами, содержащими весь код, который мне нужен для самой формы UI.
Как мне преобразовать код в набор классов, которые выполняют фактическую работу? мне нужно прекратить использовать источники данных/массивы данных и делать все в классах? мне нужен ORM?
Обычно для повторного использования кода в формах обычно требуется ноль, так ли имеет смысл преобразовать логику в классы?
Ответы
Ответ 1
Если я сталкиваюсь с формой (или другим классом) с большой ответственностью, я обычно следую приведенному ниже шаблону:
- Определите новый класс для логики.
- Создайте переменную-член нового класса в форме.
- Создайте класс в onCreate и освободите его в onDestroy формы.
- Переместите единый логический элемент (например, переменную) в новый класс.
- Переместить или создать все методы для нового класса.
- Скомпилировать и протестировать.
- Продолжайте, пока вся логика не будет помещена в новый класс.
- Попробуйте отделить класс логики от класса формы. (Вы даже можете работать с интерфейсами, если хотите).
Есть ситуации, когда одного класса недостаточно, поэтому нет проблем создавать больше классов. И эти классы могут иметь другие классы.
С помощью этих шагов вы можете решить большинство из этих проблем.
Ответ 2
Для начала я очень рекомендую прочитать книгу Рефакторинг Мартина Фаулера.
Это даст вам реальное представление о том, как лучше всего разумно подойти к введению изменений в существующий (не OO) код для улучшения ремонтопригодности.
Я бы не посмотрел на ORM, пока вы не поймете, какие преимущества (если они есть) принесут вашему приложению.
Ответ 3
У меня есть такая проблема, как при использовании одного приложения, я начинаю делать следующее:
- Определите основные классы для самой общей логики в коде.
- В каждой форме переместите код, который обрабатывает бизнес-логику внутри событий как функцию/процедуры в этой форме.
- Затем переместите эти функции/процедуры в эти классы как статические методы.
- Наконец, создайте только необходимый код внутри таких форм, как идентификатор проверки и вызовы для классов.
- Для глобальных переменных старайтесь пропустить столько, сколько сможете, и просто передавайте значения в качестве параметров для методов.
Я использовал статические методы, потому что вам проще удалить код из событий и просто вызвать их, не требуя создать объект Create/Free для каждой операции. Оригинальный дизайн не был предназначен для ветки форм от кода бизнес-логики.
Окончательное приложение не было полным OO, но, по крайней мере, было легче протестировать методы, не требуя взаимодействия с формами и событиями, как раньше.
Иногда вы чувствуете, что если вы перепроектируете приложение с нуля, это будет проще, чем внести изменения, чтобы сделать его реальным проектом OO.
Ответ 4
Еще одна книга, которую я могу очень, очень рекомендую - по моему личному мнению, даже лучше подходит, чем "общая" книга рефакторинга Фаулером - "Эффективно работать с Legacy Code" Майкла Перса. Это действительно демонстрирует основные удары, которые вы ударите, выполняя такую работу. О, и: Рефакторинг устаревшего кода может быть довольно сложным для вашей психики. Надеюсь, вы справитесь с разочарованием... Мне нравится эта цитата (не помните, откуда я ее взял): "Бог смог создать мир через 6 дней, просто потому, что не было никакого кода устаревшего". Удачи.;)
Ответ 5
Импорт в Modelmaker - это мое первое действие, когда вы сталкиваетесь с существующим проектом Delphi. Modelmaker поможет вам в рефакторинг ваш код, потому что:
- графически представляет все классы, методы, переменные и т.д.
- Он очень плотно интегрирован в среде разработки Delphi (главное меню, всплывающее меню,
отдельный исследователь Modelmaker,
панель инструментов, сочетания клавиш). Эта
интеграция позволяет быстро
выполнять необходимые действия без
оставляя IDE
- У этого есть выделенный "рефакторинг" модуль, позволяющий быстро создавать, перемещать
и переименовать классы и переменные без
беспокоиться об изменении
базовый код. Modelmaker будет
автоматически изменить имена и
ссылки в всех.
Базовая функциональность Modelmaker проста в освоении. Modelmaker похож на любой другой хороший инструмент для повышения производительности. Чем больше вы вкладываете в него, тем больше вы выходите из него.
Modelmaker не свободен, но легко платит за себя в повышении производительности.
Я не нашел лучшего инструмента для рефакторинга старого кода Delphi. Они предлагают бесплатную пробную версию и некоторые приличные учебные уроки.
Дайте Modelmaker попробовать и удачи...
Ответ 6
После того, как вы поймете, что вам нужно для восстановления вашего кода, и если вы хотите использовать OPF/ORM, я предлагаю Jazz SDK