Если будет решено, что наша система нуждается в капитальном ремонте, как лучше всего это сделать?

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

  •  01-07-2019
  •  | 
  •  

Вопрос

Мы поддерживаем веб-приложение, построенное на классическом ASP, используя VBScript в качестве основного языка.Мы согласны с тем, что наш бэкэнд (фреймворк, если хотите) устарел и не предоставляет нам подходящих инструментов для быстрого продвижения вперед.Мы в значительной степени приняли текущий шаблон webMVC, который повсюду, и не можем сделать это разумным образом с помощью нынешних технологий.Большими недостающими функциями являются, среди прочего, правильная диспетчеризация и шаблонизация с наследованием.

На данный момент обсуждаются два пути:

  1. Портируйте существующее приложение на Classic ASP с помощью JScript, что, как мы надеемся, позволит нам без особых проблем перейти оттуда на .NET MSJscript и в конечном итоге перейти на платформу .NET (желательно, чтобы к тому времени уже была готова работа с MVC, ASP. NET, по нашему мнению, не намного лучше, чем сейчас).Утверждалось, что это более безопасный путь с меньшим риском, чем следующий вариант, хотя он может занять немного больше времени.
  2. Полностью переписать приложение, используя какую-то другую технологию, на данный момент лидером пакета является Python WSGI с собственным фреймворком, ORM и хорошим шаблонизатором.Здесь есть место для маневра даже для django и других готовых решений.Мы надеемся, что этот метод будет самым быстрым решением, поскольку мы, вероятно, запустим бета-версию наряду с реальным продуктом, но это может привести к большой трате времени, если мы не сможем/не сделаем все правильно.

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

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

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

Решение

Не выбрасывайте свой код!

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

Вы вложили много усилий в этот старый код и устранили множество ошибок.Выбрасывать его — классическая ошибка разработчика (и я делал ее много раз).Это заставляет вас чувствовать себя «лучше», как генеральная уборка.Но вам не обязательно покупать новую квартиру и всю новую мебель, чтобы обустроить свой дом.Вы можете работать в одной комнате одновременно...и, возможно, некоторым вещам просто нужна новая покраска.Следовательно, именно здесь на помощь приходит рефакторинг.

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

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

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

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

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

Используйте это как возможность удалить неиспользуемые функции!Определенно используйте новый язык.Назовите это 2.0.Восстановить те 80%, которые вам действительно нужны, будет гораздо проще.

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

(Я люблю удалять код.)

Это работает лучше, чем вы думаете.

Недавно я проделал большую работу по реверс-инжинирингу отвратительной старой коллекции кода на языке C.Функция за функцией я перераспределил функции, которые все еще были актуальны, в классы, написал модульные тесты для классов и создал что-то вроде приложения-замены.В классах присутствовал некоторый исходный «логический поток», а некоторые классы были плохо спроектированы [В основном это было из-за подмножества глобальных переменных, которые было слишком сложно разделить.]

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

В прошлом году я написал план проекта по замене 30-летнего COBOL.Заказчик склонялся к Java.В рамках планирования я создал прототип пересмотренной модели данных на Python, используя Django.Я мог продемонстрировать основные транзакции еще до того, как закончил планирование.

Примечание:В Django было быстрее построить модель и интерфейс администратора, чем планировать проект в целом.

Из-за менталитета «нам нужно использовать Java», конечный проект будет больше и дороже, чем завершение демо-версии Django.Без реальной ценности, способной сбалансировать эти затраты.

Кроме того, я сделал тот же базовый «прототип в Django» для настольного приложения VB, которое должно было стать веб-приложением.Я построил модель в Django, загрузил устаревшие данные и через несколько недель приступил к работе.Я использовал этот рабочий прототип, чтобы определить остальную часть усилий по преобразованию.

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

Самое приятное в создании такого прототипа в Django — это то, что вы можете возиться с моделью, модульными тестами и страницами администрирования, пока не получите результат. верно.Как только модель будет выбрана правильно, вы можете провести остаток своего времени, возясь с пользовательским интерфейсом, пока все не будут довольны.

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

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

Мой план состоит в том, чтобы в конечном итоге система ответила на WSGI, но я еще не достиг цели.Я нашел лучший способ сделать это маленькими шагами.За последние 6 месяцев количество повторного использования кода возросло, а прогресс ускорился.

Общие принципы, которые сработали для меня:

  1. Выбросьте код, который не используется и не закомментирован.
  2. Выбросьте все бесполезные комментарии.
  3. Определите иерархия слоев (модели, бизнес-логика, логика представления/контроллера, логика отображения и т. д.) вашего приложения.Это не должна быть очень четкая архитектура, а скорее должна помочь вам подумать о различных частях вашего приложения и поможет вам лучше классифицировать ваш код.
  4. Если что-то грубо нарушает эту иерархию, измените нарушающий код.Переместите код, перекодируйте его в другом месте и т. д.В то же время настройте остальную часть вашего приложения, чтобы использовать этот код вместо старого.Выбросьте старый, если он больше не используется.
  5. Пусть ваши API будут простыми!

Прогресс может быть крайне медленным, но оно того стоит.

Я бы не рекомендовал JScript, поскольку это определенно менее популярный путь.ASP.NET MVC быстро развивается, и я думаю, что вы могли бы начать переход на него, одновременно наращивая инфраструктуру ASP.NET MVC по мере ее завершения.Другой вариант — использовать что-то вроде ASP.NET w/Subsonic или NHibernate.

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

Если вы планируете перейти на Python, лучше всего начать с переписывания интерфейса администратора в Django.Это поможет вам разобраться с некоторыми тонкостями, связанными с запуском и запуском Python с IIS (или с миграцией его на Apache).Кстати говоря, я рекомендую isapi-wsgi.Это, безусловно, самый простой способ начать работу с IIS.

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

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