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

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

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

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

Ответы [ 6 ]

28 голосов
/ 14 февраля 2009

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

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

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

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

8 голосов
/ 14 февраля 2009

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

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

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

5 голосов
/ 15 февраля 2009

У меня возникла проблема, как это с одним приложением, я начинаю делать следующее:

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

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

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

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

4 голосов
/ 21 февраля 2009

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

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

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

4 голосов
/ 14 февраля 2009

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

1 голос
/ 14 февраля 2009

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

...