Подтвердить что ты не робот

Как/если реорганизовать программу Delphi с использованием только форм и модулей данных

После нескольких лет кодирования Delphi-программы как непроверяемый код в формах и datamodules, включая глобальные переменные, и только классы являются самими формами, содержащими весь код, который мне нужен для самой формы UI.

Как мне преобразовать код в набор классов, которые выполняют фактическую работу? мне нужно прекратить использовать источники данных/массивы данных и делать все в классах? мне нужен ORM?

Обычно для повторного использования кода в формах обычно требуется ноль, так ли имеет смысл преобразовать логику в классы?

4b9b3361

Ответ 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