Повторное использование, переписывание или рефакторинг?
На работе я унаследовал разработку веб-сайта на основе PHP после того, как консультант, который изначально выпустил его, вылетел и оставил без следа. Буквально половина кода вырывается из онлайн-уроков, и есть тысячи линий рывков, которые, будучи неполными, мало ценят. Вряд ли любой из них действительно работает. Я пытался вытащить используемые компоненты, такие как макет (умно смешался с кодом), управление сеансом (деликатно приукрашенным без поддержки, неутвержденными SQL-запросами) и некоторые другие вещи, но очень сложно заставить все этот мусор на место. Кроме того, я не говорю о идиоматическом PHP, будучи больше пользователем Perl, и я должен быть в этом проекте главным образом для обслуживания, поэтому переписывание всего похоже на то, что потребуется столько же времени, как борьба с существующим монстром на место.
В стороне, я буквально никогда не видел ничего такого плохо написанного как это. Приветствую меня в мире работы с кодом других людей, я думаю, но я надеюсь, что это не так распространено в реальном мире, чтобы иметь такие драгоценные камни, как эти:
-
// WHY IS THIS NOT WORKING
-
// I know this is bad but were going for working stuff right now...
-
// This is a PHP code outputing Javascript code outputting HTML...do not go further
-
// Not userful
Я ищу лучший совет, который я могу получить здесь. Что бы вы сделали, если бы вы были на моем месте?
Изменить: Спасибо, всем, за ваш быстрый и полезный совет!
Ответы
Ответ 1
Объясните проблемы своему менеджеру, указав, что расходы на поддержку продолжат монтировать, если вы не удалите технический долг в коде. Порекомендуйте, чтобы он переписывался как можно скорее, используя существующую систему в качестве шаблона для функций, то есть замену 1-1 в качестве цели. Поскольку значительная часть времени разработки вычисляет то, что вам нужно сделать, это не должно занять столько времени, сколько оригинал. Наличие у него компетентного разработчика может означать, что это займет всего лишь часть времени.
Пусть ваш менеджер выполнит свою работу - вычислите ROI в проекте замены - и примите решение.
Ответ 2
Действительно, это зависит от размера и объема того, что вы ищете.
Поскольку это относится к вашему сценарию, в частности, если работа проста, но код сломан, вы, вероятно, сохраните много времени, просто переписав его. Вы не будете наследовать какие-либо усталостные крутые или плохие варианты дизайна. Что касается веб-сайтов, существует множество рамок и/или решений с открытым исходным кодом, которые вы можете просто сопоставить с существующим сайтом без значительных усилий.
Глядя на ваш пример кода выше, похоже, что также может быть полезно отправить фрагмент кода на thedailywtf.com.;)
Ответ 3
Каждый наследует плохой код время от времени.
То, что у вас здесь, - довольно классический пример того, что я видел в прошлом (я на самом деле видел хуже). Хотя я могу понять желание переписать (и действительно, если ВСЕ код плохой, вы должны серьезно относиться к этому варианту) - ваш менеджер может не пойти на это или, по крайней мере, не сразу.
В любом случае, вы будете иметь дело с этим некоторое время. Я бы убрал столько, сколько смогу, или - если это касается клиентов - нажмите на проблемы безопасности. Если код такой же плохой, как я подозревал, из того, что вы опубликовали, он, вероятно, усеян такими удовольствиями, как SQL-инъекция, а также небольшим количеством CSRF и XSS. Таким образом, если вы используете его для чего-то, что должно быть безопасным, вы можете сделать хороший пример для его улучшения.
Ответ 4
Объясните своему клиенту, что предыдущий консультант, возможно, был в их голове. Код не поддается управлению и его необходимо переписать. Если вы хотите распутать этот беспорядок, объясните, что стоимость будет больше, чем переписать с нуля. Я должен был сделать это раньше. Его легче переписывать большую часть времени.
Ответ 5
Я не поклонник рефакторинга ради перезаписи/рефакторинга, поскольку я работаю в зрелой, устаревшей среде. Более важно увидеть "что изменилось" в исходной истории, чем увидеть красивый код. Большинство наших изменений привязаны к отчетам об ошибках или одобрены "запросы на изменение" с формальными требованиями. Но здесь я говорю о коде, который в основном работает, а ваш нет. Таким образом, в вашем случае, когда вы имеете дело с кодом, который в настоящее время не отвечает требованиям (ЛЮБЫЕ требования, прошлое или настоящее), я бы сказал, продолжайте и переписывайте.
Ответ 6
Поддерживайте код. Это отстой, но чем дольше вы занимаетесь профессией (и, будучи поставленным перед необходимостью поддержания), тем больше вы осознаете, что драгоценный камень - это не самое худшее, что вы когда-либо увидите...
Просто учитесь работать с тем, что у вас есть, и предоставляйте как можно больше преимуществ. Конечно, если вы действительно оценили код indepth, и все же приходите к выводу, что вы можете писать его с нуля быстрее, чем исправлять его, предоставлять (запланированную) временную шкалу своему боссу и видеть, куда он идет.
Ответ 7
Я думаю, как вы знаете все слишком хорошо, здесь нет простого ответа. Работа с устаревшим кодом - одна из самых неприятных вещей в нашей отрасли, но что-то большинство из нас приходится иметь дело со слишком часто. Я бы порекомендовал, прежде чем идти дальше, чтобы убедиться, что вы понимаете точную сферу действия проекта, разбирая его на необходимые вещи и желая. Затем вы можете сосредоточиться на наиболее важных областях. Что касается выбора повторного использования /refactor/rewrite и т.д., То это будет действительно зависеть от того, насколько плохим является код в первую очередь и каково будущее кода.