Какой шаг вы бы предприняли, чтобы преобразовать приложение CF из грязи в нечто современное и удобное в обслуживании? - PullRequest
6 голосов
/ 19 июля 2011

Я собираюсь выполнить задание, которое никто никогда не пытался выполнить на моем рабочем месте.Это приложение CF, впервые написанное с использованием CF 2.0 (да, 2.0!) 10 лет назад с> 10 задачами cfscheduler. Мы исследовали идею переписать приложение, но 10 лет работы просто не могут быть переписаны за 2-3месяцев.

Какие шаги нужно предпринять, чтобы перевести приложение в поддерживаемое, расширяемое состояние?То, что я продолжаю слышать, это «писать тесты», но как я могу писать тесты, когда их нет даже в MVC?

Любой совет будет оценен, спасибо!

ps Я долженпоблагодарите Allaire, Macromedia и Adobe за то, что CF так чертовски обратно совместим вплоть до 2.0!

Кстати, какое самое современное и поддерживаемое состояние для приложения CF без MVC-фреймворка?или моя конечная цель должна быть в конечном итоге рефакторинг его в приложение MVC ??Я не могу представить, сколько ссылок я разорву, если сделаю ... кажется невозможным ... подумал?

обновление: найдено 2 связанных Q ... ... 1011 *

Ответы [ 8 ]

4 голосов
/ 19 июля 2011

Я не уверен, если вам нужно переместить весь сайт в приложение MVC.Недавно я помог с сайтом, который не был MVC, в котором все еще была библиотека с Моделями, Сервисами и Ассемблерами в чистом и организованном поместье.Это работало отлично, и нам не нужно было делать ничего больше, чем было необходимо.

Это, как говорится, мой первый шаг будет организовать код спагетти в их различных целях.Может быть трудно правильно создать модели, но, по крайней мере, вы можете выделить службы, такие как функции, со страниц.С этим уже должно быть намного чище.

Затем я попытался бы взять повторный код и поместить его в пользовательские теги.Это сделает код более пригодным для повторного использования и более легким для чтения.

Удачи!

3 голосов
/ 19 июля 2011

Я подозреваю, что причина, по которой это приложение не использовалось годами, заключается в том, что по большей части оно работает.Так что старая поговорка «если она не сломана, не почините ее», вероятно, применима;Тем не менее, код всегда можно улучшить:)

Первое, что я хотел бы сделать, это переключиться на Application.cfc и добавить несколько хороших сообщений об ошибках.Таким образом, вы можете узнать о вещах, которые необходимо исправить, а также, если вы вносите изменения, вы знаете, что они нарушают что-то еще.

Следующее, что я сделаю, - это прежде чем вы измените какой-либо кодиспользовать селен для создания некоторых тестов - он может быть использован как плагин FireFox и будет записывать, что вы делаете.Это действительно хорошо для тестирования старых приложений без особой работы с вашей стороны.

Скорее всего, у вас не будет особой защиты от атак с использованием SQL-инъекций, поэтому вы захотите добавить cfqueryparam ко всему !!

После этого я буду искать дублированный код - устранение дублирующего кода облегчит обслуживание.

Удачи!

3 голосов
/ 19 июля 2011

Мне приходилось сталкиваться с подобной ситуацией около двух лет на моей последней работе, однако она была не такой старой, как ваша.Я думаю, что я имел дело с кодом от 4.0.Здесь нет серебряной пули, и вам нужно быть осторожным, чтобы вы не слишком увлеклись перефакторингом кода и затратами вашей компании на это кучу денег.Если приложение работает так, как оно переписывает, это будет довольно большая трата денег.

То, что я делал, это обновляло небольшие порции за раз, я бы даже не реорганизовывал целые шаблоны за раз, а только небольшие порции по одному за раз.Если бы я увидел какой-то конкретный уродливый цикл или вложенный, если утверждения, я бы попытался очистить его как можно лучше.Если приложение можно разбить на более мелкие модули или области функциональности, и у вас есть дополнительное время, вы можете попытаться очистить код модуля за раз.

Хорошая практика, которую я слышал из подкаста Hearding CodeСоздайте шаблон тестового набора, который будет использовать определенную страницу cfm с известным выводом, который вы можете повторно запустить, чтобы убедиться, что он по-прежнему будет таким же, как только вы произвели рефакторинг.Это не так детально, как модульное тестирование, но что-то и что-то почти всегда лучше, чем ничего, верно?

3 голосов
/ 19 июля 2011

Подумайте, действительно ли необходим полноценный фреймворк.В своей основной форме фреймворк представляет собой просто высокоорганизованный код.Так что если процедурный, который хорошо организован, работы оставьте его.

Имейте в виду что-то вроде FW / 1, поскольку путь миграции может быть лучше, чем, скажем, в Coldbox, если вам не нужны все остальные вещи.

Наконец, учтите, что я смог перенести 4,5, почти 70% пути в Coldbox (очень просто и более подробно об организации каталогов и файлов по сравнению с IOC, плагинами, модулями и т. Д.), Просто используя несколько дополнительныхстрок на файл плюс функции onMissingMethod.

Удачи.

2 голосов
/ 20 июля 2011

Я бы разбил логические части приложения на CFC

. Выберите одно представление, посмотрите на логику внутри.Переместите это в CFC и вызовите его.

Продолжайте в том же духе, у вас будет что-то гораздо более удобное в работе, которое можно подключить к MVC позже.Это почти не работает, просто скопируйте и вставьте фрагменты кода и вызывайте их.

2 голосов
/ 19 июля 2011

Как ни странно, в настоящее время я занимаюсь преобразованием старого приложения CF в приложение MVC3.Теперь это не CF2, он был обновлен совсем недавно, год назад, поэтому все это может вообще не относиться к вашему сценарию, извиняюсь, если это так.

Главное, что мне нужно было сделать, консолидироватьсмешанные CFQuerys и их вызовы в логические единицы кода, которые я затем мог начать портировать в функциональности либо на C #, либо на JavaScript.

К счастью, это было очень простое приложение, большая часть логики была вызвана в базе данныхиспользование библиотеки DWR Ajax;то, чего не было, было в основном консолидировано в файле functions.cfm.

Очевидно, что не нужно воспроизводить большую часть этого поведения при упаковке отдельных компонентов логики (такими, какими они были) вПриложение CF довольно аккуратно отображалось в различных частичных представлениях и шаблонах редактора, которые я предусмотрел в приложении MVC.

После этого это был просто случай, страница за страницей, выяснение, какая логика была вызвана, когда,на что он опирался, а затем, наконец, создал серию диаграмм классов и последовательностей UML.

Честно говоря, я думаю, что получил наибольшее преимущество, когда просто нажал File-New Project и начал пытаться копировать поведениеприложение из верхней части index.cfm.

1 голос
/ 20 июля 2011

Вы можете рассмотреть возможность использования фабрики объектов для создания слоя вашего приложения.У нас похожая ситуация на работе, и мы начали рефакторинг, установив Lightwire DI framework.

Сначала мы перенесли все операторы sql в шлюзы, затем начали использовать сервисы и переносили много кода из шаблонов в сервисы.

Работа еще не закончена, но приложение уже выглядит лучше.

0 голосов
/ 21 июля 2011

Для больших, действительно сложных приложений я бы предпочел ColdBox для рефакторинга проекта.Однако на конференции D2W я только что видел презентацию F / W 1 (Framework One) , ОЧЕНЬ простую среду ColdFusion MVC. Проверьте код из презентации здесь .

Это 1 (один) CFC-файл и набор соглашений для организации вашего кода.Я настоятельно рекомендую оценить его для вашего проекта.

...