Лучшие практики для рефакторинга классического ASP? - PullRequest
15 голосов
/ 23 августа 2008

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

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

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

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

Обновление:

В проекте более 200 сценариев ASP длиной в несколько тысяч строк;) UGH!

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

Ответы [ 8 ]

11 голосов
/ 13 сентября 2008

Предположения

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

Руководство не ищет переписать.

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

Мой опыт

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

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

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

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

Правильный отступ в сценариях.

Комментарий

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

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

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

В sourceforge есть проект aspunit , но последний выпуск был в 2004 году и помечен как неактивный. Никогда не использовал это, но это чистый VBScript. Беглый взгляд на код говорит мне, что авторы знали, что они делают.

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

Удачи! НТН.

3 голосов
/ 24 августа 2008

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

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

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

2 голосов
/ 16 ноября 2008

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

Я также обнаружил, что Эффективно работает с устаревшим кодом Майкла Фезерса (Michael Feathers) - полезное руководство по поиску способов тестирования части старого кода.

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

2 голосов
/ 05 ноября 2008

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

.

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

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

1 голос
/ 13 сентября 2008

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

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

«Тысячи строк» ​​заставляет меня подозревать, что могут также быть ситуации, когда на одной странице отображаются свободно связанные вещи. Здесь вы снова хотите абстрагировать их в отдельные подпрограммы.

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

1 голос
/ 23 августа 2008

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

0 голосов
/ 24 июня 2015

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

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

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

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

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

0 голосов
/ 22 апреля 2010

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

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