Мне нужно значительно усовершенствовать большую, старую, спагетти-систему. Я давно не работал с ASP, сосредоточив свои усилия на разработке Rails.
Один из основных шагов, которые я предпринял, - это преобразовать страницы в подпрограммы и функции с осмысленными именами, чтобы, по крайней мере, было легко понять, что обычно происходит в верхней части файла.
Есть ли подходящая среда MVC для ASP? Или лучший способ, как хотя бы вывести бизнес-логику из представлений? (Я помню, что когда-то делал много включений - так ли все еще можно делать?)
Я бы тоже хотел провести модульное тестирование бизнес-логики, но, может быть, я прошу слишком многого?
В проекте более 200 ASP скриптов, несколько тысяч строк;) Ух ты!
Мы можем сделать выбор в пользу «большого переписывания», но до тех пор, когда я меняю страницу, я хочу потратить немного больше времени на очистку спагетти.





Есть ли шанс перейти с ASP на ASP.Net? Или вы хотите сохранить его в классическом ASP, но просто очистить его. Если это вообще возможно, я бы рекомендовал как можно больше перейти на .Net. Похоже, вы все равно переписываете / реорганизуете много кода, поэтому переход на .Net может не потребовать больших усилий.
Поскольку полное переписывание работающей системы может быть очень опасным, я могу дать вам лишь небольшой совет: установите в своем проекте обильные теги, ctags. Таким образом, вы можете легко перейти к определению функции и подпрограммы, что, как мне кажется, очень помогает.
Об отделении логики от «взглядов». VBScript поддерживает некоторые виды объектно-ориентированного программирования с классами. Я обычно пишу классы, которые выполняют логику, которую я включаю на asp-страницу, которая действует как «представление». Затем я соединяю представление с таким классом, как Username:. Класс MyAccount также может иметь такие методы, как: MyAccount.Login () и так далее.
Вроде примитивно, но, по крайней мере, вы можете заключить в оболочку какой-то код и скрыть его от HTML.
Предположительно кто-то другой написал большую часть или всю систему, которую вы сейчас поддерживаете. Ищите обычные вредные привычки (повторяющийся код, слишком широкие переменные, вложенные операторы if и т. д.) И выполняйте рефакторинг, как и любой другой язык. Следите за повторяющимися вещами в одном и том же файле или в разных файлах и преобразуйте их в функции.
Если код был написан / поддержан разными людьми, могут возникнуть проблемы с непоследовательным стилем кодирования. Я считаю, что приведение кода в порядок помогает увидеть вещи, которые можно реорганизовать.
«Тысячи строк» заставляют меня подозревать, что также могут быть ситуации, когда на одной странице отображаются слабо связанные вещи. И снова вы хотите абстрагировать их в отдельные подпрограммы.
В конце концов, вы захотите написать объекты, которые помогут инкапсулировать такие вещи, как соединение с базой данных, но пройдет некоторое время, прежде чем вы доберетесь до этого.
Предположения
Документация к системе Classic ASP довольно легкая.
Руководство не ищет переписывания.
Поскольку вы занимались рубином на рельсах, ваш (VB / C#) ASP.NET в лучшем случае подойдет.
Мой опыт
Я тоже унаследовал классическую систему ASP, которую волей-неволей собрали воедино бывшие типы excel-vba. Было много всего этого <font size=3>crap</font> (и иногда отсутствовали закрывающие теги; Argggh!). В течение 2,5 лет я добавил систему безопасности, общую библиотеку CSS + XHTML и смог заставить это проверить xhtml1.1 (к сожалению, без правильного типа mime) и построил довольно надежную систему отчетности ajaxy, которая сейчас ежедневно используется 80 пользователями.
Я использовал jEdit с cTags (как упоминалось выше в заедание) и кучу других плагинов.
Мой совет Попробуйте создать главный включаемый файл, из которого можно будет импортировать все, что обычно используется. Такие вещи, как вход / выход, доступ к базе данных, веб-службы, библиотеки javascript и т. д.
Используйте классы. Они ультра-примитивны (без наследования), но, как сказал Джем, могут быть удобными.
Правильно сделайте отступ в скриптах.
Комментарий
Напишите документ внешней архитектуры. Лично я использую LyX, потому что создание красиво отформатированного PDF-файла безумно, но вы можете использовать все, что захотите. Если вы используете вики, установите надстройку graphviz и используйте ее. Очень легко создавать быстрые диаграммы, которые можно легко изменять.
Поскольку я понятия не имею, насколько существенными должны быть улучшения, я предлагаю иметь хороший документ по архитектуре высокого и среднего уровня, который будет весьма полезен при планировании улучшений.
В модульных тестах бизнес-логики единственное, что я обнаружил, что работает, - это настройка прослушивателя xml-rpc в asp, который импортирует основную библиотеку и предоставляет функции (но не подпрограммы) в любом из вложенных включений основной библиотеки, а затем построить отдельно систему модульного тестирования на языке с лучшей поддержкой того, что вызывает функции ASP через xml-rpc. Я использую python, но думаю, что Ruby должен помочь. (Имеет ли это смысл?). Замечательно то, что человеку, пишущему часть программного обеспечения для модульного тестирования, не нужно даже смотреть на код ASP, если у него есть достойные описания вызываемых функций, чтобы он мог быть кем-то рядом с вами.
В sourceforge есть проект под названием aspunit, но последний выпуск был в 2004 году, и он помечен как неактивный. Никогда не использовал, но это чистый vbscript. Беглый взгляд на код говорит мне, что похоже, что авторы знали, что они делают.
Наконец, если вам нужна помощь, у меня есть возможность выполнять работу по контракту на дому (максимум 8 часов в неделю). Следуйте по ссылке для получения контактной информации.
Удачи! HTH.
Я бы посоветовал продолжить рефакторинг, классический ASP поддерживает классы, поэтому вы должны иметь возможность перемещать все, кроме кода отображения, во включенные файлы ASP, которые содержат только классы. В этой статье подробно рассказывается о переходе от старомодного asp к ASP.NET.
Что касается будущего направления, я бы не стремился к веб-формам ASP.NET, вместо этого я бы выбрал новую платформу MVC от Microsoft как надстройку к ASP.NET). Будет намного проще перейти на это с классического ASP.
Автор этого ответа должен сообщить, что он является автором статьи с оплатой за просмотр, на которую он ссылается здесь. За 8 долларов он не покрывает большую часть того, что вы не найдете в книге Фаулера или Фезера.
Я использую ASPUnit для модульного тестирования некоторых из наших классических ASP и считаю его полезным. Он может быть старым, но ASP тоже. Это просто, но это работает, и вы можете настроить или расширить его при необходимости.
Я также обнаружил, что Эффективная работа с устаревшим кодом Майкла Фезерса может быть полезным руководством для поиска способов протестировать часть этого старого кода.
Включаемые файлы могут помочь, если вы сохраните простоту. В какой-то момент я попытался создать включение для каждого класса, но это не сработало. Мне нравится иметь пару основных включений с общей бизнес-логикой, а для сложных страниц иногда включать с логикой для каждой из этих страниц. Я полагаю, вы могли бы сделать MVC с аналогичной настройкой.
Это очень старый, но не удержался и добавил свои два цента. Если вам нужно переписать и продолжать использовать классический ASP:
Практика управления проектами разработки программного обеспечения показывает, что подобное программное обеспечение необходимо вывести из эксплуатации.
Я знаю, как тяжело поступать правильно, тем более, когда ответственный менеджер знает дерьмо и боится всего, кроме худшего.
Но все равно. Необходимо приступить к разработке нового программного обеспечения. Это просто невозможно поддерживать вечно, а логеру они ждут вывода на пенсию тем хуже.
Если у вас нет надлежащей документации по спецификациям / требованиям (я думаю, что ни одно программное обеспечение asp в мире не имеет, учитывая нубатическую способность этих кодировщиков), вам понадобится как группа пользователей, которые знают функции программного обеспечения, так и менеджер, который будет отвечает за проверку требований. Вам нужно будет просмотреть каждую функцию и задокументировать ее требования.
В ходе этого процесса вы узнаете больше о программном обеспечении и его бизнесе. Как только у вас будет достаточно информации, вы можете приступить к разработке новой.
или, поскольку вы знакомы с RoR, вам следует изучить Castle Monorail как альтернативу Microsoft ASP.NET MVC. Сейчас они оба достаточно зрелые, но Monorail был первым, и он хорошо интегрируется с реализацией Castle ActiveRecord, поэтому, возможно, будет проще подобрать и стек Microsoft MVC.