В настоящее время я выполняю некоторую работу для компании, которая запускает устаревшее веб-приложение, построенное на сервлетах Java (система предшествовала JSP, хотя теперь они используют их при создании новых страниц). Кодовая база представляет собой большой беспорядок, так как она создавалась около 10 лет поверх устаревшей структуры. У них очень мало согласованности в кодовой базе (приложение разрабатывалось разными людьми на протяжении многих лет, большинство из которых здесь больше не работают), нет концепции DRY (каждая страница в основном создается с нуля), много нечитаемого / загадочного кода и вообще очень противоречивая инфраструктура.
Пока я работал здесь, я добавлял современные функции/пытался немного подчистить кодовую базу. Я добавил немного jQuery туда, где меня выставляли, ввел немного безопасности с проверкой ввода, очистил некоторые модули, чтобы использовать ненавязчивые принципы JavaScript и т. д. Моя работа здесь связана с новыми модулями, поэтому я не знаком со многими старыми. логика. Я пытался внедрить лучшие практики во всю свою работу в их текущей инфраструктуре, но я вынужден вызывать много их старого кода, чтобы сделать мои вещи согласованными.
Они достигли точки, когда теперь рассматривают возможность масштабного обновления системы. Они хотят улучшить ремонтопригодность базы кода и пытаются перейти на какое-то современное приложение типа framework/MVC. Многие системы предшествуют XHTML со встроенной стилистической разметкой, вызовами javascript:function(), отсутствием модульного тестирования, предшествуют Hibernate и т. д. Существует сочетание генерации html out.println и вызова jsp из сервлета.
Некоторые приложения, на которые они обращают внимание, включают Wicket, Struts, Tapestry и, возможно, Grails. Проблема в том, что переход на любой из них может потребовать серьезной переделки системы, которая уже используется, и они не могут позволить себе начать все сначала.
Мой вопрос: как лучше всего перенести устаревшую кодовую базу, такую как эта, в более современную структуру, сохранив при этом существующую бизнес-логику (нет смысла переписывать материал, который был протестирован и работает).
Некоторые из рассматриваемых идей включают:
написать внутреннюю систему шаблонов, которая будет работать с их текущей инфраструктурой (генерировать страницы согласованным образом)
портировать код в фреймворк, такой как гобелен (повторно используя много своего старого кода)
переписать систему с нуля, используя современный фреймворк, но скопировав логику из старой системы (если возможно)
оставьте старую систему как есть и просто обновите страницы переднего плана, чтобы придать ей более современный вид (возможно, лучше всего потратить время/деньги и т. д.)
каков наилучший способ обновить устаревший код Java Servlet до современной структуры (используя современные методы для простоты обслуживания, модульного тестирования, DRY), сохраняя при этом логику?
любое понимание приветствуется.