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