ASP.NET MVC 4

ASP.NET MVC 4

Адам Фриман

Веб разработка сегодня

Вне Microsoft технологии веб разработки довольно быстро прогрессирует в нескольких различных направлениях, с тех пор как была впервые выпущена Web Forms. Кроме AJAX появились и другие важные технологии.

Веб стандарты и REST

В последние годы возросла потребность соответствовать веб стандартам. Веб сайты предназначаются для самых разных устройств и браузеров, чем когда-либо прежде, и веб стандарты (HTML, CSS, JavaScript и т. д.) остаются нашей одной большой надеждой наслаждаться приличным просмотром сайтов и приложений везде, даже по холодильникам с интернет поддержкой. Современные Web платформы не могут позволить себе игнорировать идеи бизнеса и желания разработчиков соответствовать веб стандартам.

Повсеместно начинает использоваться HTML5. Он предоставляет веб разработчикам богатые возможности, что позволяют выполнять работу, которая ранее была исключительной прерогативой серверов, на стороне клиента. Эти новые возможности и наступающая зрелость библиотек JavaScript, таких как JQuery, JQuery UI, и JQuery Mobile, обозначают, что стандарты становятся все более важными и составляют основу для более богатых веб приложений.

Примечание

В этой книге мы коснемся HTML5, jQuery и схожих вещей, но мы не будем вдаваться в подробности, потому что эти технологии сами по себе заслуживают особого внимания. Если вы хотите получить более полную информацию, то вы можете найти книги Адама Фримана, изданные Apress, по этим темам: Pro jQuery, Pro JavaScript for Web Apps (Pro JavaScript для веб приложений) и The Definitive Guide to HTML5 (Полное руководство по HTML5).

В то же время REST (Representational State Transfer, «передача представлений состояний») стал доминирующей архитектурой для взаимодействия приложений через HTTP, полностью затмевая SOAP (технологию, лежащую в основе оригинального подхода ASP.NET к веб сервисам). REST описывает приложение в условиях ресурсов (URI), представляя реальные объекты и стандартные операции (HTTP методы), отражая доступные операции на этих ресурсах. Например, вы можете использовать PUT с новым http://www.example.com/Products/Lawnmower или DELETE с http://www.example.com/Customers/Arnold-Smith

Современные веб приложения обслуживают не только HTML. Зачастую они также должны обслуживать данные JSON или XML для различных технологий клиента, включая AJAX, Silverlight, и родных приложений для смартфонов. Это происходит, естественно, с REST, который устраняет исторические различия между веб сервисами и веб приложениями, но требует такого подхода к обработке HTTP и URL, который не так легко поддерживается ASP.NET Web Forms.

Экстремальное программирование и разработка через тестирование (test-driven development, TDD)

Не только веб разработка развивалась в последнее десятилетие – разработка программного обеспечения, в целом, также сместилась на путь экстремального программирования. Это может означать много разных вещей, но в основном речь идет о создании программных проектов как адаптационных процессов открытия и разработки без обременительного и ограничивающего перспективы планирования. Желание экстремального программирования, как правило, идет рука об руку с определенным набором программистских навыков и используемых средств (как правило, с открытым исходным кодом), которые содействуют и помогают изучению и использованию таких технологий.

TDD (разработка через тестирование) и его последнее воплощение, BDD, являются двумя очевидными примерами. Идея заключается в разработке программного обеспечения с изначального описания примеров желаемого поведения (известного как тесты или спецификации), так что в любой момент вы можете проверить стабильность и правильность вашего приложения, выполняя набор тестов по отношению к реализации. .NET инструментов хватает для поддержки TDD/BDD, но они, как правило, не очень хорошо работают с Web Forms:

  • Инструменты для модульного тестирования позволяют определить поведение отдельных классов или других небольших частей кода в изоляции. Они могут быть эффективно использованы только для программного обеспечения, которое было спроектировано как набор независимых модулей, так что каждый тест может быть запущен отдельно. К сожалению, немногие приложения Web Forms могут быть протестированы таким образом. Следуя руководству фреймворка о том, чтобы вставить логику в обработчики событий или даже использовать серверные элементы управления, которые непосредственно отправляют запросы к базам данных, разработчики обычно, в конечном итоге, плотно связывают логику приложения со средой выполнения Web Forms. Это смерть для модульного тестирования.
  • Инструменты автоматизированного тестирования пользовательского интерфейса позволяют моделировать ряд взаимодействий пользователя с запущенным экземпляром приложения. В теории эти тесты могут быть использованы с Web Forms, но они могут не сработать, когда вы сделаете небольшие изменения в макете страницы. Не обращая на это внимание, Web Forms начинает генерировать совершенно другие HTML структуры и ID элементов, так что существующий набор тестов становится бесполезным.

Сообщество создателей .NET приложений с открытым исходным кодом и независимый поставщик программного обеспечения (ISV) создали высококачественные фреймворки для модульного тестирования (NUnit и XUnit), фиктивные фреймворки (Moq и Rhino Mocks), инверсионные контейнеры (Ninject и Autofac), серверы непрерывной интеграции (Cruise Control и TeamCity), объектно-реляционные мапперы (NHibernate и Subsonic) и тому подобное. Сторонники этих инструментов и методов подали свой голос, создавая публикации и организуя конференции под общим брендом ALT.NET. Традиционная технология ASP.NET Web Forms не поддерживает эти инструменты и методы из-за своего монолитного дизайна, поэтому у этой группы экспертов Web Forms не пользуется особым уважением.

Ruby on Rails

В 2004 году Ruby on Rails был не особенно известной технологией с открытым исходным кодом от неизвестного игрока. И вдруг пришла слава, которая перевернула правила веб-разработки. Не то, что бы Ruby на Rails содержал революционные технологии, но эта концепция взяла существующие ингредиенты и смешала их таким убедительным и привлекательным образом, что существующие платформы начали гореть для стыда.

Ruby on Rails (или просто Rails, как его обычно называют) принял архитектуру MVC (которую мы опишем чуть ниже). Применяя MVC и работая в гармонии с HTTP-протоколом, а не против него, содействуя конвенциям вместо потребности в конфигурации и интегрируя инструментарий объектно-реляционного маппинга (ORM) в своей основе, приложения Rails заняли свое место без особых усилий. Это выглядело так, как должна была бы выглядеть веб разработка все время, как если бы мы вдруг поняли, что наши инструменты все эти годы воевали, а теперь война закончилась.

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

Sinatra

Благодаря Rails вскоре многие веб разработчики стали использовать Ruby в качестве основного языка программирования. Но в таком интенсивно развивающемся сообществе это было только вопросом времени, когда появится альтернатива Rails. Самая известная, Sinatra, появилась в 2007 году.

Sinatra отбрасывает почти всю стандартную инфраструктуру Rails (маршрутизацию, контроллеры, представления и т.д.) и просто картирует URL шаблоны для блоков кода Ruby. Посетитель запрашивает URL, вызывающий блок кода Ruby, который будет выполнен, и данные передаются обратно браузеру – вот и все. Это невероятно простой вид веб разработки, но он нашел свою нишу в двух основных направлениях. Во-первых, для поддерживающих REST веб сервисов он просто быстро выполняет свою работу (мы коснемся REST в главе 25). Во-вторых, поскольку Sinatra может быть подключена к широкому спектру HTML шаблонов с открытым исходным кодом и ORM технологиям, она часто используется в качестве основы, на которой собирается пользовательский Web фреймворк в соответствии с архитектурными потребностями любого проекта, который есть под рукой.

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

Node.js

Другой важной тенденцией является движение в сторону использования JavaScript в качестве основного языка программирования. AJAX впервые показал нам, что JavaScript очень важен, JQuery показал нам, что он может быть мощным и элегантным, а движок Google JavaScript V8 с открытым исходным кодом показал нам, что он может быть невероятно быстрым. Сегодня JavaScript становится серьезным серверным языком программирования. Он служит хранилищем данных и является языком запросов для нескольких нереляционных баз данных, в том числе CouchDB и Mongo. Также он используется в качестве универсального языка на серверных платформах, таких как Node.js.

Node.js появился примерно в 2009 году и получил широкое признание очень быстро. Архитектурно он похоже на Синатру в том, что он не применяет MVC паттерн. Это более низкоуровневый способ подключения HTTP запросов к коду. Его основные нововведения заключаются в следующем:

  • Использование JavaScript: Разработчикам нужно работать только с одним языком, от клиентского кода до логики на стороне сервера и даже до логики запросов данных с помощью CouchDB и тому подобного.
  • Абсолютная асинхронность: Базовый API Node.js просто не блокирует потоки во время ожидания ввода/вывода (I/O) или во время любой другой операции. Все I/O осуществляются с началом операции и затем получением обратного вызова, когда I/O завершается. Это означает, что Node.js делает чрезвычайно эффективным использование системных ресурсов и может обрабатывать десятки тысяч одновременных запросов для CPU (альтернативные платформы, как правило, ограничиваются около сотней одновременных запросов для CPU).

Как и Sinatra, Node.js является нишевой технологией. Обычно большинство бизнес проектов, создавая реальные приложения в ограниченных временных рамках, нуждаются в полных фреймворках, таких как Ruby on Rails и ASP.NET MVC. Node.js упоминается здесь только для того, чтобы мы могли рассмотреть другие современные технологии, а не только ASP.NET MVC. Например, ASP.NET MVC включает в себя асинхронные контроллеры (которые мы опишем в главе 17). Это способ обработки HTTP-запросов с неблокируемым I/O и обработки большего числа запросов для CPU. Вы увидите, что ASP.NET MVC очень хорошо интегрируется со сложным JavaScript кодом, работающим в браузере.

или RSS канал: Что новенького на smarly.net