Главная страница   /   1.3. Основные преимущества ASP.NET MVC (ASP.NET MVC 4

ASP.NET MVC 4

ASP.NET MVC 4

Адам Фриман

1.3. Основные преимущества ASP.NET MVC

ASP.NET стал большим коммерческим успехом, но, как уже говорилось, остальной мир веб-разработки также развивался, и хотя Microsoft сдувал пыль с Web Forms, ее основные конструкции начали выглядеть весьма устаревшими.

В октябре 2007 года на первой конференции по ALT.NET в Остине, штат Техас, вице-президент Microsoft Скотт Гатри объявил и продемонстрировал новую платформу по разработке MVC, построенную на базовой платформе ASP.NET, явно задуманную как прямой ответ на эволюцию технологий, таких как Rails и как реакцию на критику Web Forms. В следующих разделах описывается, как эта новая платформа преодолела ограничения Web Forms и снова возвеличила ASP.NET.

Архитектура MVC

Важно различать архитектурный паттерн MVC и ASP.NET MVC Framework. MVC паттерн не является новым, его корни уходят к 1978 году и проекту Smalltalk в Xerox PARC, но он завоевала огромную популярность сегодня в качестве паттерна для веб приложений по следующим причинам:

  • Взаимодействие пользователя с MVC приложением следует естественному циклу: пользователь совершает действие, в ответ на это приложение меняет свою модель данных и предоставляет пользователю обновленный вид. А затем цикл повторяется. Это очень удобно для веб-приложений, предоставляемых в виде серии HTTP запросов и ответов.
  • Необходимость веб приложению объединять несколько технологий (например, базы данных, HTML и исполняемый код), как правило, разбивается на множество уровней или слоев. Моделей, которые вытекают из этих комбинаций, естественны для концепции MVC.

ASP.NET MVC Framework реализует MVC паттерн и, тем самым, обеспечивает значительно улучшенное разделение концепций. На самом деле ASP.NET MVC реализует современный вариант MVC паттерна, который особенно хорошо подходит для веб приложений. Вы узнаете больше о теории и практике применения этой архитектуры в главе 3.

Применяя и адаптируя MVC паттерн, ASP.NET MVC Framework сильно конкурирует с Ruby on Rails и аналогичными платформами, и переносит MVC паттерн в основное русло мира .NET. Суммируя опыт и лучшую практику разработчиков, использующих другие платформы, можно сказать, что ASP.NET MVC может предложить даже больше, чем Rails.

Расширяемость

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

ASP.NET MVC дизайнеры построили его таким образом, чтобы дать вам три варианта выбора для каждого компонента MVC Framework:

  • Использовать реализацию по умолчанию компонента в его нынешнем виде (чего должно быть достаточно для большинства приложений).
  • Вывести подкласс реализации по умолчанию для настройки ее поведения.
  • Заменить компонент полностью при помощи новой реализации интерфейса или абстрактного базового класса.

Это похоже на модель еще из ASP.NET 2.0, но давайте пойдем еще дальше – прямо в сердце MVC Framework. Вы узнаете все о различных компонентах, как и почему вы, возможно, захотите настроить или заменить каждый из них, начиная с главы 12.

Жесткий контроль над HTML и HTTP

ASP.NET MVC признает важность получения чистой, соответствующей стандартам разметки. Его встроенные методы HTML помощника предоставляют соответствующие стандартам выходные данные, но есть и более значительные философские изменений по сравнению с Web Forms. Вместо того чтобы плодить огромные участки HTML, котором нам сложно управлять, MVC Framework рекомендует вам выработать простой, элегантный стиль разметки с помощью CSS.

Конечно, если вы хотите использовать некоторые готовые виджеты для сложных элементов пользовательского интерфейса, такие как выбор даты или каскадное меню, то вам стоит знать, что подход ASP.NET MVC к разметке упрощает использование лучших в своем роде UI библиотек, таких как JQuery UI или библиотеки Yahoo YUI. Разработчики JavaScript будут рады узнать, что ASP.NET MVC так хорошо сработался с популярной библиотеки JQuery, что Microsoft сделал JQuery встроенной частью шаблона проектов ASP.NET MVC и даже позволяет напрямую ссылаться на .js файл jQuery на собственных CDN серверах Microsoft.

Страницы, сгенерированные ASP.NET MVC, не содержат никаких данных View State, поэтому они могут быть в сотни килобайт меньше, чем обычные страницы, созданные при помощи ASP.NET Web Forms. Несмотря на современную широкополосную связь и быстрые подключения, эта экономия пропускной способности до сих пор чрезвычайно притягательна для конечных пользователей.

Как Ruby on Rails, ASP.NET MVC работает в гармонии с HTTP. Вы полностью контролируете запросы, проходящие между браузером и сервером, поэтому вы можете подогнать настройки под себя, на сколько вам это нравится. AJAX сделан просто, и нет никакого автоматического обратного вмешательства в состояния на стороне клиента. Любой разработчик, который в первую очередь фокусируется на веб программировании, почти наверняка посчитает это освобождением и будет наслаждаться рабочим процессом.

Тестируемость

Архитектура MVC дает вам отличную возможность создавать ваше приложение таким, чтобы его можно было легко сопровождать и тестировать, потому что вы, естественно, захотите разделить логические блоки приложения по независимым частям программного обеспечения. Тем не менее, создатели ASP.NET MVC на этом не остановились. Для поддержки модульного тестирования они приняли компоненто-ориентированный дизайн фреймворка и убедились, что каждая отдельная часть построена так, чтобы отвечать требованиям модульного тестирования.

Они добавили мастера (визарды) Visual Studio для создания начальных проектов модульного тестирования от вашего имени, которые интегрированы с инструментами модульного тестирования с открытым исходным кодом, такими как NUnit и XUnit, а также собственным MSTest Microsoft. Даже если вы никогда не писали модульных тестов, вам будет легко в этом разобраться.

В этой книге вы увидите примеры того, как писать чистые, простые модульные тесты для ASP.NET MVC контроллеров и действий, с поддержкой фальшивых (fake) и фиктивных (mock) реализаций фреймворк компонентов для моделирования любых сценариев, используя различные стратегии тестирования.

Тестируемость – это не только вопрос модульного тестирования. ASP.NET MVC приложения также хорошо работают с инструментами автоматического тестирования. Вы можете написать тестовые скрипты, которые имитируют взаимодействие с пользователем, без необходимости гадать, какие структуры HTML элементов, CSS классы или ID будет генерировать фреймворк, и вам не придется беспокоиться о структуре, если она вдруг неожиданно изменится.

Мощная система маршрутизации (роутинга)

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

/App_v2/User/Page.aspx?action=show%20prop&prop_id=82742

можно встретить довольно редко. Теперь они заменены более простым и чистым форматом:

/to-rent/chicago/2303-silver-street

Есть несколько веских причин для заботы о структуре URL. Во-первых, поисковые системы придают значительный вес ключевым словам, находящимся в URL. Поиск "аренда в Чикаго" (rent in Chicago) имеет гораздо больше шансов с простым URL. Во-вторых, многим пользователям Интернета теперь хватит навыков и знаний, чтобы понять URL, и оценить возможности навигации, набрав его в адресной строке своего браузера. В-третьих, когда кто-то понимает структуру URL, он, скорее всего, будет ссылаться именно на него, поделится этой ссылкой с другом или даже продиктует ее вслух по телефону. В-четвертых, такая ссылка не предоставляет технические подробности, папки, имена файлов и структуру приложения на весь общественный Интернет, так что вы можете изменить внутреннюю реализацию, не нарушая ссылки.

В более ранних фреймворках было сложно реализовать чистые ссылки, но ASP.NET MVC использует возможность System.Web.Routing, которая по умолчанию создает чистые URL-адреса. Теперь вы можете контролировать схему ссылок и ее связь и отношение к приложению, то есть вы свободны в создании шаблона URL-адресов, которые являются значимыми и полезными для пользователей, без необходимости соответствовать предопределенному шаблону. И, конечно, это означает, что вы можете легко определить современную URL схему в стиле REST, если захотите. Более подробную информацию о маршрутизации и лучших способах создания чистых URL вы найдете в главах 13 и 14.

Возможность разрабатывать в лучших сегментах платформы ASP.NET

Существующая платформа Microsoft ASP.NET предоставляет зрелый, хорошо зарекомендовавший себя набор компонентов и средства для разработки эффективных и действенных веб приложений.

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

Во-вторых, готовые возможности платформы ASP.NET, такие как мастер-страницы, аутентификация, роли, профили и интернационализация, могут уменьшить количество кода, который нужно писать и поддерживать для любых веб приложений, и эти функции так же эффективны при использовании в MVC Framework, как и в классических проектах Web Forms. Вы можете заново использовать некоторые встроенные серверные элементы управления Web Forms, а также свои собственные элементы управления из предыдущих проектов ASP.NET в приложениях ASP.NET MVC (если они не зависят от некоторых конкретных возможностей Web Forms, таких как View State).

Современный API

С момента своего создания в 2002 году .NET платформа Microsoft неумолимо развивалась, поддерживая и даже определяя аспекты современного программирования.

ASP.NET MVC 4 был создан для .NET 4.5, поэтому его API в полной мере принял преимущества самых современных языков и технологий, в том числе ключевое слово await, методы расширений, лямбда-выражения, анонимные и динамические типы и LINQ (Language Integrated Query). Многие из методов API MVC Framework и паттерны кодирования следуют более чистым, более выразительном композициям, чем это было возможно на более ранних платформах.

ASP.NET MVC имеет открытый исходный код

В отличие от предыдущих платформ веб-разработки от Microsoft, вы можете загрузить исходный код для ASP.NET MVC и даже изменить и скомпилировать собственную версию. Это имеет неоценимое значение, когда ваша отладка касается системы компонентов, и вы хотите зайти в код (и даже прочитать комментарии программистов-создателей). Это также полезно, если вы создаете «продвинутые» компоненты и хотите посмотреть, какие возможности существуют для их развития или как действительно работают встроенные компоненты.

Кроме того, эта возможность хороша в том случае, если вам не нравится, как что-то работает, если вы нашли ошибку или если вы просто хотите получить доступ к чему-то такому, что в противном случае недоступно, потому что вы можете просто изменить это самостоятельно. Тем не менее, вам нужно будет отслеживать изменения и повторять их, если вы перейдете на более новую версию платформы. ASP.NET MVC лицензирован Microsoft Public License (Ms-PL, http://www.opensource.org/licenses/ms-pl.html), а Open Source Initiative (OSI)-утвердил открытую лицензию. Это означает, что вы можете менять исходный код, разворачивать его и даже распространять ваши изменения публично как вами созданный проект. Вы можете скачать исходный код MVC на http://aspnetwebstack.codeplex.com.