Существует три основных различия: сопоставление URL-адресов, отделение логики от представления и строгая типизация.
URL-сопоставление
В классическом ASP плавный переход от написания HTML-страниц к написанию HTML-страниц с динамическим содержимым. Как и в случае статических файлов HTML, каждый URL имеет прямое сопоставление с файлом в файловой системе. То же самое более или менее верно в отношении ASP.NET, чего бы это ни стоило.
В ASP.NET MVC каждое «семейство» URL-адресов сопоставляется с объектом Controller (по умолчанию хранится в каталоге / Controllers), где каждый член семейства вызывает метод при доступе. В конце каждого метода (обычно) вы указываете ему визуализировать конкретное представление (хранящееся в папке с именем контроллера в каталоге / Views), которое во многом похоже на классическую страницу ASP со всей выделенной логикой. ,
Это дает вам логичные и оптимизированные для SEO URL-адреса и объединяет связанные функции.
Отделение логики от представления
В классическом ASP часто встречаются страницы, на которых в верхней части содержится немного HTML, а затем открывается соединение с базой данных, и некоторые вещи считываются из базы данных во время вывода пользователю, а затем еще несколько HTML, а затем еще один оператор базы данных и так далее.
В ASP.NET MVC ваша бизнес-логика (например, проверка) идет на уровне модели (вы можете выбрать один из нескольких десятков, но популярными являются LINQ-to-SQL и LINQ-to-Entity-Framework), ваша логика человеческого интерфейса поступает в контроллер (например, заполняет меню «Штат / провинция» на основе выбора «Страна»), а ваша презентация (фактический HTML, который вы можете передать дизайнеру для редактирования) переходит в представление.
Помимо организации вещей, это очень помогает в написании автоматических тестов для вещей. Вы можете отправить макет объекта на ваше представление и убедиться, что он выглядит хорошо, вы можете отправить неверные данные в вашу модель и убедиться, что они жалуются, и вы можете убедиться, что объект, который ваш контроллер отправляет вашему представлению, соответствует что он читает из модели.
Сильный набор текста и компиляция
ASP.NET строго типизирован и скомпилирован. Это обоюдоострый меч. С одной стороны, он поймает много глупых ошибок программиста во время компиляции. С другой стороны, это означает, что в вашем коде остаются «бесконечность минус одна» возможных ошибок (модульное тестирование может сделать бесконечность минус некоторое большее число). Кроме того, вам придется делать такие вещи, как:
if (MyArray.Length > 0)
вместо
if (MyArray.Length)
Но ИМХО, это небольшая цена, которую нужно платить за проверку скорости и здравомыслия, которую вы получаете от строгой типизации.
Большим недостатком скомпилированных языков в большой среде является то, что развертывание становится гораздо более производительным, чем с чем-то вроде Classic ASP. Вы не можете просто скопировать пару файлов на веб-сервер для обновления вашего приложения. Обычно вам нужно выключить веб-сервер (надеюсь, у вас есть избыточная пара) и перекомпилировать, что может занять несколько минут.