Лучшие практики рефакторинга классического ASP?

StackOverflow https://stackoverflow.com/questions/23899

Вопрос

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

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

Существует ли стоящий фреймворк MVC для ASP?Или лучшая практика в том, как, по крайней мере, извлечь бизнес-логику из представлений?(Я помню, что в свое время делал много включений - это все еще тот способ, которым это делается?)

Я бы тоже хотел провести модульное тестирование бизнес-логики, но, может быть, я прошу слишком многого?

Обновить:

В проекте более 200 скриптов на ASP, длиной в несколько тысяч строк ;) ТЬФУ!

Мы можем выбрать "большую правку", но до тех пор, когда я буду менять страницу, я хочу потратить немного дополнительного времени на очистку спагетти.

Это было полезно?

Решение

Допущения

Документация для классической системы ASP довольно легкая.

Руководство не стремится к переписыванию.

Поскольку вы работаете на ruby on rails, ваш (VB / C #) ASP.NET в лучшем случае сносен.

Мой опыт

Я тоже унаследовал классическую систему ASP, которая волей-неволей сочеталась с типами ex excel-vba.Там было много всего этого барахла <font size=3>crap</font> (и иногда отсутствуют закрывающие теги;Аргггх!).В течение 2,5 лет я добавил систему безопасности, общую библиотеку, CSS + XHTML и смог принудительно проверить xhtml1.1 (к сожалению, без надлежащего mime-типа) и создал довольно надежную систему отчетов ajaxy, которой ежедневно пользуются 80 пользователей.

Я использовал jEdit с cTags (как упоминалось заклинивание выше), и куча других плагинов.

Мой Совет Попробуйте создать основной включаемый файл, из которого можно импортировать все обычно используемые материалы.Такие вещи, как вход / выход из системы, доступ к базе данных, веб-сервисы, библиотеки javascript и т.д.

Используйте классы.Они ультрапримитивны (без наследования), но, как сказал джемтинг, они могут быть удобными.

Сделайте правильный отступ в скриптах.

Комментарий

Напишите внешний архитектурный документ.Лично я использую LyX, потому что с его помощью сложно создать красиво отформатированный PDF-файл, но вы можете использовать все, что вам нравится.Если вы используете wiki, установите надстройку graphviz и используйте ее.Очень просто создавать быстрые диаграммы, которые можно легко изменять.

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

В модульных тестах бизнес-логики единственное, что я обнаружил, что это работает, - это настройка прослушивателя xml-rpc в asp, который импортирует основную библиотеку и предоставляет функции (хотя и не подпрограммы) в любом из вложенных компонентов основной библиотеки, а затем создает отдельно систему модульного тестирования на языке с лучшей поддержкой материала, который вызывает функции ASP через xml-rpc.Я использую python, но я думаю, что Ruby должен сделать то же самое.(Имеет ли это смысл?).Самое классное, что человеку, пишущему модульную тестируемую часть программного обеспечения, не нужно даже смотреть на ASP-код, если у него есть приличные описания вызываемых функций, так что им может быть кто-то рядом с вами.

Есть проект под названием как единица измерения в sourceforge, но последний релиз был в 2004 году, и он помечен как неактивный.Никогда им не пользовался, но это чистый vbscript.Беглый взгляд на код говорит мне, что, похоже, авторы знали, что делали.

Наконец, если вам нужна помощь, у меня есть возможность выполнять дистанционную работу по контракту (максимум 8 часов в неделю).Перейдите по ссылке, чтобы получить контактную информацию.

Удачи вам!ХТХ.

Другие советы

Поскольку полное переписывание работающей системы может быть очень опасным, я могу дать вам лишь небольшой совет:Установите в вашем проекте яркие теги ctags.Таким образом, вы можете легко перейти к определению функции и подраздела, что, я думаю, очень помогает.

Об отделении логики от "представлений".VBScript поддерживает некоторый тип OO с классами.Я склонен писать классы, которые выполняют логику, которую я включаю на asp-странице, которая действует как "представление".Затем я объединяю представление с классом, подобным Username:<%= Мой аккаунт.Имя пользователя %>.Класс MyAccount также может иметь такие методы, как:MyAccount.Login() и так далее.

Немного примитивно, но, по крайней мере, вы можете капсулировать некоторый код и скрыть его из HTML.

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

Рефакторинг ASP

Что касается будущего направления, я бы не стремился к ASP.NET веб-формам, вместо этого я бы выбрал новую платформу Microsoft MVC framework в качестве дополнения к of ASP.NET) Будет намного проще перейти на это из классического ASP.

Я использую Как единица измерения для модульного тестирования некоторых из наших классических ASP и нахожу это полезным.Он может быть старым, но и ASP тоже.Это просто, но это действительно работает, и вы можете настроить или расширить его при необходимости.

Я также нашел Эффективная работа с устаревшим кодом автор Michael Feathers - полезное руководство по поиску способов протестировать часть этого старого кода.

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

Есть ли шанс, что вы могли бы перейти с ASP на ASP.Net?Или вы хотите сохранить его в классическом ASP, но просто почистить.Если это вообще возможно, я бы рекомендовал перенести как можно больше страниц в .Net.Похоже, вам все равно придется переписывать / реорганизовывать много кода, поэтому переход на .Net может не потребовать больших дополнительных усилий.

Предположительно, кто-то другой написал большую часть или всю систему, которую вы сейчас поддерживаете.Обратите внимание на обычные вредные привычки (повторяющийся код, переменные со слишком широкой областью действия, вложенные операторы if и т.д.) И выполните рефакторинг, как на любом другом языке.Следите за повторяющимися элементами в одном и том же файле или в разных файлах и абстрагируйте их в функции.

Если код был написан / поддерживается разными людьми, могут возникнуть некоторые проблемы с несогласованным стилем кодирования.Я нахожу, что приведение кода обратно в соответствие облегчает просмотр вещей, которые можно реорганизовать.

"Длиной в тысячи строк" вызывает у меня подозрение, что также могут быть ситуации, когда на одной странице отображаются слабо связанные вещи.Опять же, вы хотите абстрагировать их от отдельных подпрограмм.

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

Это очень старое блюдо, но я не смог удержаться, чтобы не добавить свои два цента.Если вы должны переписать и должны продолжать использовать классический ASP:

  • используйте JScript!гораздо более мощный, вы получаете наследование, и есть некоторые хорошие побочные преимущества, такие как использование тех же методов для проверки на стороне сервера, что и для проверки на стороне клиента
  • вы абсолютно можете использовать MVC - я написал фреймворк MVC, и в нем было не так уж много строк кода
  • вы также можете автоматически создавать свои классы моделей, немного потрудившись.У меня есть некоторый код для этого, который работал довольно хорошо
  • убедитесь, что вы выполняете параметризованные запросы и всегда возвращаете несвязанные наборы записей

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

Я знаю, как трудно поступать правильно, тем более когда ответственный менеджер знает все и боится всего, кроме самого простого.

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

Если у вас нет надлежащей документации по спецификациям / требованиям (я думаю, что ни одно программное обеспечение asp в мире не имеет такой документации, учитывая невозможность использования этих программистов), вам понадобятся как группа пользователей, которые знают функции программного обеспечения, так и менеджер, ответственный за проверку требований.Вам нужно будет просмотреть каждую функцию и задокументировать ее требования.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top