В качестве примечания: ищите новую работу. Этот не станет лучше.
Цели кода, который вы просматриваете:
Для отправки функции, которая должна работать в соответствии с требованиями.
Сократить рост технического долга.
Первая цель проверяется путем проверки наличия модульных, интеграционных, системных и функциональных тестов, их актуальности и охвата всех ситуаций, которые необходимо проверить. Вы также должны проверить убеждения оригинального автора в отношении языка программирования, которые могут привести к незначительным ошибкам или к коду, притворяющемуся делать что-то отличное от того, что он делает на самом деле.
Вторая цель - та, на которой сосредоточен ваш вопрос. С одной стороны, новый кодекс не ожидается увеличения технического долга. С другой стороны, предметом обзора является сам код, но в контексте всей кодовой базы. Оттуда вы, как рецензент, можете ожидать два подхода от первоначального автора:
Внешний код не моя вина. Я просто реализую эту функцию, и мне нет дела до всей кодовой базы.
С этой точки зрения код будет копировать недостатки кодовой базы и, следовательно, неизбежно увеличивать технический долг: чем больше плохого кода, тем хуже.
Хотя это действительный краткосрочный подход, в долгосрочной перспективе это приведет к увеличению задержек и низкой производительности и в конечном итоге приведет к тому, что процесс разработки станет настолько дорогим и рискованным, что продукт перестанет развиваться.
Написание нового кода - это возможность реорганизовать старый код.
С этой точки зрения влияние недостатков унаследованного кода на новый может быть ограничено. Более того, техническая задолженность может быть уменьшена или, по крайней мере, не увеличена пропорционально росту кода.
Хотя это действительный долгосрочный подход, он имеет свои краткосрочные риски. Основным из них является то, что в краткосрочной перспективе иногда требуется больше времени для доставки конкретной функции. Другим важным аспектом является то, что если унаследованный код не проверен, его рефакторинг представляет огромный риск введения регрессий.
В зависимости от того, какую точку зрения вы хотите поощрить, вы можете посоветовать рецензируемым больше рефакторинг или нет. В любом случае, не ожидайте безупречного, чистого кода с красивой архитектурой и дизайном внутри дурацкой базы кода. Не следует поощрять поведение, когда хорошо осведомленный разработчик, который должен работать над дрянной кодовой базой, старается хорошо выполнять свою роль . Вместо того, чтобы делать вещи проще, это только делает их более сложными, чем раньше. Теперь вместо единого плохого кода у вас есть часть с шаблонами проектирования, другая часть с чистым и понятным кодом, другая часть, которая подверглась обширному рефакторингу с течением времени, и никакого единства.
Представьте, например, что вы открываете устаревшую кодовую базу для сайта среднего размера. Вы удивлены отсутствием какой-либо обычной структуры и тем фактом, что ведение журнала выполняется после добавления материала в текстовый файл вручную, а не с помощью каркаса ведения журнала. Вы решаете для новой функции использовать MVC и каркас регистрации.
Ваш коллега реализует другую функцию и очень удивлен отсутствием ORM, в котором можно было бы сделать идеальный размер. Поэтому он начинает использовать ORM.
Ни вы, ни ваш коллега не в состоянии пройти сотни тысяч строк кода, чтобы использовать MVC, каркас журналирования или ORM повсюду. На самом деле, это потребует месяцев работы: представьте, что вы внедряете MVC; Сколько времени это займет? Или как насчет ORM в ситуациях, когда SQL-запросы хаотически генерировались посредством конкатенации (со случайными местами для SQL-инъекций) внутри кода, который никто не мог понять?
Вы думаете, что проделали отличную работу, но теперь новый разработчик, который присоединяется к проекту, должен столкнуться с гораздо большей сложностью, чем раньше:
Старый способ обработки запросов,
Путь MVC,
Старый механизм регистрации,
Каркас каротажа,
Прямой доступ к базе данных с SQL-запросами, созданными на лету,
ОРМ.
В одном проекте, над которым я работал, было четыре (!) Каркаса ведения журнала, используемых бок о бок (плюс ручное ведение журнала). Причина в том, что каждый раз, когда кто-то хотел что-то записывать, не было единого подхода к этому, поэтому вместо изучения новой инфраструктуры (которая во всех случаях использовалась только в 5% кодовой базы), можно было просто добавить другую, которую он уже знает. Представьте себе беспорядок.
Лучшим подходом будет рефакторинг кодовой базы по одному шагу за раз. Если снова взять пример ведения журнала, рефакторинг будет состоять из следующих небольших шагов:
Найдите все места, где ведется традиционное ведение журнала (т. Е. Когда осуществляется прямой доступ к файлу журнала), и убедитесь, что все они вызывают одни и те же методы.
Переместите этот код в выделенную библиотеку, если применимо. Я не хочу регистрировать логику хранения в своем классе корзины покупок.
Измените, если необходимо, интерфейс методов ведения журнала. Например, мы можем добавить уровень, указывающий, является ли сообщение неформальным, предупреждением или ошибкой.
Используйте недавно переработанные методы в новой функции.
Перейдите к структуре ведения журнала: единственный затронутый код - это код в выделенной библиотеке.