Я категорически против переписывания приложения, если этого можно избежать. Я понимаю правило, что в 9 случаях из 10 лучше провести рефакторинг, но я нахожусь в ситуации, когда это может быть один раз из десяти, и я ищу эту строку.
Текущая ситуация:
- Я взял на себя обслуживание приложения VB6/SQL.
- Общее количество строк кода составляет 75-100 тысяч (код программной части, модули и классы).
- Первоначальный разработчик ушел, так что остался только я, и нет возможности расширить команду, по крайней мере, на несколько лет.
- В программе не было никакой архитектуры (только прямые вызовы SQL в виде простого текста в виде кода программной части).
- Не пытается следовать принципам DRY или OAOO.
- В базе данных было несколько первичных ключей, но не было внешних ключей.
- До того, как эта система была внедрена, все управлялось в больших электронных таблицах, поэтому эта система действительно является огромным улучшением по сравнению с тем, что у них было, но она не делает то, что они предполагают.
- Мне удалось написать несколько инструментов для замены всех буквальных экземпляров имен таблиц и имен столбцов константами и поисковыми запросами, а также я написал скрипт для быстрого создания кода для создания этих констант и поисковых запросов из базы данных, так что теперь я могу безопасно вносить изменения в базу данных и везде видеть, что сломалось. Я начал нормализовать базу данных «по краям», но это около 3% пути.
- Модульных тестов нет, поэтому каждый раз, когда я меняю базу данных, мне в основном приходится переписывать любую логику, лежащую поверх нее, и я использую две версии, чтобы сравнить функциональность и убедиться, что они одинаковы. Все идет нормально.
- Я начал с того, что просто попытался исправить критические ошибки, чтобы остановить кровотечение, и я могу с уверенностью сказать, что в основном это сделано, поэтому теперь я на мгновение отступлю, чтобы взглянуть на общую картину.
- Руководство благосклонно и разумно в своих ожиданиях.
- Долгосрочная цель - все равно преобразовать его в .NET...
Итак, я взвешиваю следующие варианты:
- Продолжить нормализацию базы данных и модифицировать приложение VB6 по ходу дела (в конечном итоге переписывать по частям)
- Переведите VB6 в состояние только для обслуживания (без новых функций), выберите один функциональный модуль за раз и перепишите эту часть в .NET поверх нормализованной структуры базы данных.
Я думаю, что если я выберу вариант 1, то в конце концов у меня будет только приложение VB6, которое они все еще хотят обновить до .NET, и я изучил это, и это дорого и требует много времени, и даже с инструментами, которые вы все равно получится что-то вроде Франкенштейна. Если я выберу вариант 2, я думаю, что смогу закончить быстрее и перейду сразу к целевой технологии.
В небольших фрагментах, которые я уже переписал в процессе нормализации, результатом стал улучшенный модуль по сравнению с тем, что уже было, поэтому во время переписывания добавляется ценность.
Существующее приложение, несмотря на все его недостатки, является отличной темой для обсуждения. Люди, использующие его, могут сказать мне, что работает для них, а что нет, так что в этом, безусловно, есть большая ценность.
Итак, можно ли считать это одним из случаев «один из десяти» или нет?