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