Мы только начинаем масштабную работу по перерисовке моей работы - около 13000 страниц JSP, а приложение содержит более 1,5 миллиона строк кода.
Я отшутился на нашей первой встрече по планированию, потому что по большей части все предполагали, что мы собираемся выполнить рефакторинг каждой страницы вручную. Ручной рефакторинг был бы абсолютной последней вещью, которую я хотел бы рассмотреть, - это самый дорогой способ сделать это с наименьшей пользой. Вы получаете версию программного обеспечения, которая не упрощает процесс перерисовки, и в то же время должна поддерживаться параллельно в течение остального времени. Другими словами, вы получаете ответственность.
В любом случае, я собираюсь предложить или найти утилиту, которая будет сканировать вывод HTML страниц JSP, чтобы он мог фиксировать фактический конечный CSS, используемый на каждом элементе. Это избавит нас от необходимости писать собственный синтаксический анализатор CSS, который имитирует правила селекторов CSS и т. Д. Вместо этого мы получим полный окончательный список каждого значения CSS для каждого элемента и запишем эту информацию в набор таблиц базы данных. Оттуда мы можем проанализировать CSS, ища общие черты, которые мы можем затем записать как общие классы или миксины (используя SASS), и выписать остальные как классы, специфичные для элементов, которые используют эти общие определения.
После того, как весь CSS будет выведен, инструмент перезапишет файлы JSP с соответствующими классами CSS для каждого элемента.
Следует отметить, что между любой из рассматриваемых страниц очень мало общего. Я полагаю, что при точной настройке инструмента в течение нескольких итераций мы, возможно, можем прийти к точке, в которой мы можем определить определенные части страницы как принадлежащие к набору компонентов уровня страницы, таких как панели, группы полей, контейнеры и т. Д. идентифицируя эти элементы на каждой странице, мы можем в конечном итоге внедрить фактические повторно используемые компоненты вместо существующего HTML.
Я думаю, что это, вероятно, единственный действительный подход, который имеет шанс конвертировать страницы с некоторой степенью уверенности, что ничего не сломается. Мы бы вообще не меняли структуры элементов HTML, поэтому изначально выходные данные инструмента должны отображаться точно так же, как в настоящее время, но с такой структурой, которая позволит нам начать вносить изменения во внешний вид всего приложения с редактирование одной точки в правильные классы и т. д.
С этой целью я уже нашел инструмент, который может делать именно то, что я описываю - он из LinkedIn и называется CSS Blocks . Они упоминают еще один инструмент, который используется для оптимизации CSS под названием OptiCSS (звучит как «оптика»), но, видимо, он не совсем готов к прайм-тайм.
В любом случае, я надеюсь, что кое-что из этого имеет смысл и может быть полезным. Не стесняйтесь, напишите мне с вопросами или комментариями.