Как провести рефакторинг старого PHP-кода?[закрыто]

StackOverflow https://stackoverflow.com/questions/100876

  •  01-07-2019
  •  | 
  •  

Вопрос

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

Проблема с этим кодом (и, как я подозреваю, с большей частью PHP-кода в целом) заключается в том, что он развился до того места, где он есть, и структурирован не очень хорошо, имеет много почти идентичных вырезанных/вставленных фрагментов кода и интенсивно используется. глобальных переменных, даже если задействованы функции.Разумеется, нигде нет ни одного модульного теста, а код жестко запрограммирован для использования конкретной БД и опирается на строки $_REQUEST с веб-страницы, которая вызывает код.

Правильнее было бы вытащить фрагменты кода в виде подфункций, привести их в порядок и добавить несколько модульных тестов, чтобы убедиться, что он продолжает работать, добавив попутно несколько макетов объектов.Однако делать это полностью вручную утомительно и подвержено ошибкам, и мне интересно, как вы это делаете - есть ли, например, IDE или инструмент, который может помочь?Я хотел бы иметь инструмент, который может помочь создать функцию из определенного фрагмента кода, предложить, какие переменные должны быть параметрами, по значению или ссылке, автоматически добавлять ссылки $this-> и т. д.

Это слишком много, или есть хорошее решение?

Спасибо!

Это было полезно?

Решение

Аллан, я никогда не видел такого мощного инструмента рефакторинга.Даже рефакторизация Eclipse для Java не является полной.Однако есть несколько общих советов по рефакторингу.Обычно я реорганизую приложения в два этапа.

1.Разделите вещи. Я извлекаю материалы, связанные с базой данных и моделями, и извлекаю их из основного кода.Некоторое представление объекта могло бы помочь.Проверять Активная запись или ДАО шаблон для любого ОРМ работа.HTML-код можно вынести из основного кода и переместить в файлы шаблонов.Ознакомьтесь с хорошим механизмом шаблонов с мощной поддержкой обработки логики представления — Умник.

2.Поместите все в структуру MVC. MVC — это надежная архитектура, которая исключительно хорошо подходит для веб-приложений.Используйте одну из платформ PHP, чтобы связать отдельные файлы PHP с методами контроллера.Фреймворки упрощают управление URL-адресами, HTTP-запросами, передачей параметров, управлением информацией для входа и обычно предоставляют некоторые механизмы контроля доступа.

Но самое главное:не ломайте вещи, не подлежащие ремонту.Это рефакторинг, а не переработка ;-)

Другие советы

Эта статья действительно подчеркивает опасности рефакторинга/переработки старого уродливого кода:

http://www.1729.com/blog/EconomicsOfTestingUglyCode.html

Мой подход обычно заключается в решении одной небольшой проблемы за раз, которая начинается с сокрытия большей части старого кода за интерфейсом, где с ним можно разобраться «позже», не затрагивая новый код.Таким образом, все, что я пишу, может быть хорошо спроектировано и иметь прочную структуру, но мне не придется тратить слишком много времени на рефакторинг, а затем тестировать плохой код на недели/месяцы/годы.

Ни один инструмент не сможет взять уродливый код и каким-то образом снова сделать его красивым.Фраза «возврат к формуле» — довольно пугающая перспектива для зрелого проекта, но для меня она пуста…

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

Это большой шаг, но именно это и происходит, когда код остается гнить.

Другие ваши варианты:

  1. Проведите частичную реструктуризацию, при которой весь новый код следует установленному режиму, а старый код медленно перерабатывается.
  2. Просто исправьте свои ошибки и не делайте реструктуризацию.

Я чувствую твою боль.Однако я никогда не слышал о таком инструменте, по крайней мере, для PHP.

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

Я гуглил именно это и нашел интересный блог клиента Accurev.

http://blog.accurev.com/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/

Наличие подходящего инструмента контроля версий в вашем наборе инструментов не повредит.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top