Ответ на вопрос о рефакторинге без контекста - это все равно, что ответить на вопрос о дизайне без контекста. Потому что вы меняете дизайн. Я обычно начинаю с «причин для рефакторинга». Может быть, у меня есть показатели, которые я превышаю. (Посмотрите, класс с 10000 строк, конечно, он может быть разделен на несколько более связных, более связных классов, с меньшей связью и более тесной связью).
Итак, если вы обнаружите, что у вас много кода, в котором есть несколько сотен условий if ... else в обработчиках событий, как я часто это делаю, я на минуту забуду об этом обработчике событий,
и уменьшите его, как сказал человек выше, до минимальной объектно-ориентированной модели:
если тогда
DOA (меньше, параметры)
иначе, если б то
DOB (это, вообще говоря, лучше)
иначе, если с, то
DOc;
...
Теперь, если doA, doB и doC принадлежат друг другу в другом объекте (они разделяют состояние и изменяют / контролируют некоторый конкретный набор полей), то я мог бы переместить методы doA, doB, doC в другой объект.
В общем, однако, вместо того, чтобы переходить к конкретному конкретному случаю, когда обработчики событий делают все, я также нахожу следующий удобный шаблон delphi:
procedure TForm1.BigGuiControlRightButtonClick(Sender;...);
begin
BigThingController.RightClickMenuHandler(Sender, ....)
end;
procedure TForm1.BigGuiControlDoSomeThing(Sender:TObject);
begin
BigThingController.DoSomeThing;
end;
procedure TForm1.Print(Sender);
begin
DocumentManager.Print(Document);
end;
Мне нравится, когда мои методы TForm понятны и читаемы. Мне не нравится видеть много шума и много кода для проверки ошибок. Я считаю, что приложения, которые тщательно поддерживались и отлаживались в течение многих лет, имеют тенденцию итеративного роста к полному беспорядку нечитаемых спагетти. Если цель рефакторинга состоит не только в том, чтобы сделать код красивым, то у рефакторинга также должна быть некоторая измеримая цель качества. Сокращение количества дефектов, сбоев и т. Д. Иногда я использую рефакторинг как время, чтобы удалить функции, которые больше не являются полезными или неправильно реализованы. Так что мой код стал более правильным, когда я закончил, и не просто подвергся рефакторингу, чтобы соответствовать какому-то идеалу того, как код должен быть написан, но это не меняет качества, с которым сталкивается пользователь. Я разработчик Delphi, и я ориентирован на цели, ориентирован на качество и прагматичен, а не стилизатор. Другие люди могут отличаться здесь.