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

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

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

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

6 ответов

Решение

Если я сталкиваюсь с формой (или другим классом) со слишком большой ответственностью, я обычно следую примеру ниже:

  1. Определите новый класс для логики.
  2. Создайте переменную-член нового класса в форме.
  3. Создайте класс в onCreate и освободите его в onDestroy формы.
  4. Переместите один фрагмент логики (например, переменную) в новый класс.
  5. Переместите или создайте все методы в новый класс.
  6. Скомпилируйте и протестируйте.
  7. Продолжайте, пока вся логика не будет добавлена ​​в новый класс.
  8. Попробуйте отделить класс логики от класса формы. (Вы можете даже работать с интерфейсами, если хотите).

Бывают ситуации, когда одного класса недостаточно, поэтому нет проблем создать больше классов. И эти классы могут иметь другие классы.

С помощью этих шагов вы можете решить большинство из этих проблем.

Для начала я настоятельно рекомендую прочитать книгу " Рефакторинг " Мартина Фаулера.

Это даст вам реальное понимание того, как лучше всего разумно подходить к внесению изменений в существующий (не OO) код для повышения удобства сопровождения.

Я не буду рассматривать ORM до тех пор, пока у вас не будет четкого понимания того, какие преимущества (если таковые имеются) можно получить для вашего приложения.

Я столкнулся с такой проблемой с одним приложением, я начинаю делать следующее:

  1. Определите основные классы для наиболее общей логики в коде.
  2. В каждой форме перемещайте код, который обрабатывает бизнес-логику внутри событий, как функции / процедуры в этой форме.
  3. Затем переместите эти функции / процедуры в эти классы как статические методы.
  4. Наконец, создайте только необходимый код внутри форм, таких как интерфейс проверки и вызовы классов.
  5. Для глобальных переменных старайтесь опускать столько, сколько можете, и просто передавайте значения в качестве параметров методам.

Я использовал статические методы, потому что вам проще удалить код из событий и просто вызывать их, не требуя создания / освобождения объекта для каждой операции. Оригинальный дизайн не был разработан, чтобы отделить формы от кода бизнес-логики.

Конечное приложение не было полным OO, но по крайней мере было проще протестировать методы, не требуя взаимодействия с формами и событиями, как раньше.

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

Импорт в Modelmaker - это мое первое действие, когда я сталкиваюсь с существующим проектом Delphi. Modelmaker поможет вам в рефакторинге вашего кода, потому что:

  • Графически представляет все классы, методы, переменные и т. Д.
  • Он очень тесно интегрирован в Delphi IDE (главное меню, всплывающее меню, отдельный проводник Modelmaker, панель инструментов, сочетания клавиш). Эта интеграция позволяет быстро выполнять необходимые действия, не покидая IDE
  • Он имеет специальный модуль "рефакторинга", позволяющий быстро создавать, перемещать и переименовывать классы и переменные, не беспокоясь об изменении базового кода. Modelmaker будет автоматически изменять имена и ссылки во всех подразделениях.

Основные функции Modelmaker просты в освоении. Modelmaker, как и любой другой хороший инструмент повышения производительности, - чем больше вы вкладываете в него, тем больше вы получаете от него. Modelmaker не бесплатен, но легко окупается за счет повышения производительности. Я не нашел лучшего инструмента для рефакторинга старого кода Delphi. Они предлагают бесплатную пробную версию и некоторые достойные учебные фильмы. Дай Моделмейкеру попробовать и удачи...

Еще одна книга, которую я очень рекомендую - по моему личному мнению, даже лучше, чем "универсальная" книга Фаулера по рефакторингу, - "Эффективно работать с устаревшим кодом" Майкла Фезерса. Это действительно демонстрирует основные удары, которые вы можете получить, выполняя такую ​​работу. Да, и: Рефакторинг устаревшего кода может быть довольно тяжелым для вашей психики. Я надеюсь, что вы справитесь с разочарованием... Мне нравится эта цитата (не помню, откуда я ее взяла): "Бог смог создать мир за 6 дней только потому, что не было никакого унаследованного кода". Удачи.;)

После того, как вы поймете, что вам нужно для рефакторинга вашего кода, и если вы хотите использовать OPF/ORM, я предлагаю Jazz SDK

Другие вопросы по тегам