После нескольких месяцев разочарований и времени, потраченного на вставку игл в куклы вуду предыдущих разработчиков, я решил, что лучше попытаться реорганизовать устаревший код.
Я уже заказал книгу Майкла Пера , мне нравится Рефакторинг Фаулера , и я сделал несколько примеров проектов с DUnit .
Так что, даже если я не осваиваю предмет, я чувствую, что пришло время действовать и воплощать некоторые идеи в жизнь.
Почти 100% кода, над которым я работаю, содержат бизнес-логику в пользовательском интерфейсе, более того, все это процедурное программирование (за некоторыми исключениями). Приложение запустилось так быстро и грязно и продолжило как таковое.
Теперь написание тестов для всех приложений - бессмысленная задача в моем случае, но я хотел бы попытаться выполнить юнит-тестирование того, что мне нужно для рефакторинга.
Одна из сложных задач, которую выполняет один большой «класс бизнес-логики TForm», - это чтение данных БД, выполнение некоторых вычислений и заполнение компонента планировщика. Я хотел бы удалить данные чтения БД и вычислительную часть и назначить новому классу эту задачу. Конечно, это способ улучшить текущий дизайн, это не лучший способ начать с нуля, но я хотел бы сделать это, потому что данные, возвращаемые этим новым классом, полезны и в других отношениях, например, сейчас я Вас попросили отправить по электронной почте уведомления о данных планировщика.
Итак, чтобы избежать масштабной операции копирования и вставки, мне нужен новый класс.
Теперь планировщик заполняется из огромного набора данных (огромного по размеру и количеству полей), возможно, первым шагом к рефакторингу могло бы стать получение набора данных из нового класса. Но в будущем я бы лучше использовал новый класс (например, TSchedulerData или другое имя, менее привязанное к планировщику) для управления данными, и вместо того, чтобы в результате получить набор данных, у меня может быть объект TSchedulerData.
Поскольку процесс рефакторинга выполняется небольшими шагами, и для улучшения рефакторинга необходимы тесты, я немного запутался в том, как действовать.
Следующие пункты мне не понятны:
1) как проверить сложный набор данных? Должен ли я запустить работающее приложение, сохранить один набор результатов в xml и написать тест, в котором я использую TClientDataSet, содержащий эти данные xml?
2) Сколько мне нужно заботиться о TSchedulerData? Я имею в виду, что я не уверен на 100%, что буду использовать TSchedulerData, может быть, я буду придерживаться набора данных, так как мысль о создании сложных тестов, которые будут отброшены через 2 недели, не подходит для DUnitNewbee. В любом случае, вероятно, так оно и есть. Я не могу представить количество ошибок, с которыми я столкнулся бы без теста.
Последнее замечание: я знаю, что кто-то думает, что переписывание с нуля - лучший вариант, но это не вариант. «Приложение огромно, оно продается сегодня, и сегодня необходимы новые функции, чтобы не обанкротиться». Это то, что мне сказали, в любом случае рефакторинг может спасти мою жизнь и продлить жизнь приложения.