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