вторник, марта 04, 2008

ASP.NET MVC Framework

Должен вам признаться в том, что я жуть как не люблю ASP.NET WebForms. Я не люблю их за то, что они хотят казаться WinForm-ами, а это у них плохо получается. Я не люблю их за постбэки (postback) и их аццкие порождения – вьюстэйты. Это не религиозные чувства, просто все это очень сложно и с ними не удобно работать. Viewstate тяжело контролировать, а в купе с серверными событиями он порождает очень неэффективные решения, которые по полной грузят и канал и сервер. Механизм postback-ов провоцирует размещать код, отвечающий за сценарий взаимодействия с пользователем (workflow) в самих aspx формах. Постепенно они обрастают кодом, который естественно не охвачен модульными тестами и служит постоянным источником проблем.

Но, есть хорошая новость. В готовящемся к выпуску пакете Microsoft ASP.NET 3.5 Extensions есть замечательная штука под названием MVC Framework.

В своем блоге Scott Gu опубликовал несколько подробных постов с описанием MVC Framework, ссылки на которые собраны под заголовком «ASP.NET MVC Framework Road-Map»

Что же такого хорошего предлагают нам под маркой MVC Framework?

Во-первых, это честный Model View Controller фрэймворк, который к тому же очень красиво спроектирован. Он позволяет делать хорошо структурированные решения, и предлагает для этого очень удобный инструментарий. Web запросы обрабатываются не ASP.Net страницами, а классами контроллерами. Контроллеры содержат всю бизнес логику, а на долю web страниц оставлена лишь отрисовка UI.

Во-вторых, MVC Framework легко расширяем. В качестве модели можно использовать практически все что угодно: ADO.Net DataReader-ы и DataSet-ы, любые ORM фрэймворки, XML, и конечно LINQ to SQL. В качестве View можно использовать обычные ASP.NET формы и контролы, или написать свои собственные, хотя MVC предлагает свой готовый набор компонент и утилит для генерации представления.

В–третьих, MVC Framework спроектирован максимально удобно для модульного тестирования. Основные контракты реализованы через интерфейсы, и легко заменяются mock-объектами (у меня сложилось впечатление, что необходимые mock-и уже есть в составе фрэймворка). Контроллеры и URL-мапперы можно тестировать вне ASP.NET процесса и приложения. Представления практически не содержат кода, кроме биндинга и рендеринга. Все это облегчает тестирование MVC приложения.

В-четвертых, MVC Framework содержит мощный и гибкий механизм URL-маппинга. Так, например, можно сменить формат URL с вот такого «/products/edit.aspx?id=4», на вот такой «/products/edit/4», и при этом не придется изменять ни одной строчки кода, в контроллерах и web станицах. Достаточно только поменять URL-маппинг.

При всем при этом, MVC Framework не отменяет и не конфликтует (я надеюсь…) с существующими фичами ASP.NET, такими как аутентификация windows/forms, membership/roles, механизм провайдеров, кэширование данных, master pages и т.д.

В общем, MVC Framework производит очень приятное впечатление. С нетерпением буду ждать его выхода. Вот только не понятно мне, почему он выходит в составе ASP.NET Extensions, по моему ему самое место в ASP.NET Core :)

12 комментариев:

Анонимный комментирует...

>>При всем при этом, MVC Framework не отменяет и не конфликтует (я надеюсь…)

Не конфликтует. Уже давно доступна CTP. Там есть глупые фишки, но в целом я на 100% согласен, что впечатление производит более чем положительное.

Unknown комментирует...

http://castleproject.org/monorail/index.html
А вот еще, в копилку.

snow комментирует...

В составе extention, потому что сам по себе MVC - это просто шаблон-каркас, а его реализация может довольно разниться от проекта к проекту(от фрейвока к фрейворку), взглянуть хотя бы на WebClient Software Factory. Вполне возможно что вместо MVC потребуется реализация MVPC на какой-либо странице, да и техник url-rewrite множество.
Кроме того, для меня пока не совсем прозрачно выглядит работа AJAX и WebServices совместно с MVC.

Анонимный комментирует...

подождем релиза.

Анонимный комментирует...

+1 monorail

Анонимный комментирует...

его следует назвать ASP on Rails))

Sergey Rozovik комментирует...

Да на монорельс похоже. Но мне MVC FW как-то польше нравится (аргументированного сравнения пока дать не могу).

Unknown комментирует...

Плюс монорейла в том что он отлично интегрируется с Windsor, ActiveRecord/NHibernate и Prototype js что создает вполне убойную связку.

Sergey Rozovik комментирует...

to Kpoxa
Скотт Гу пишет, что MVC FW тоже отлично интегринруется со всеми перечисленными ORM-ами. А вот как там у них дела обстоят с AJAX, не знаю. Вот если бы посмотреть конкретный примерчик...

Анонимный комментирует...
Этот комментарий был удален администратором блога.
Sergey Rozovik комментирует...

to Анонимный
Нецензурная лексика не здесь приветствуется.
И еще, если у вас такие проблемы с программированием, может стоит выбрать профессию по проще?

Ежики комментирует...

Ну ажак, как ажакс. Никто не мешает использовать хоть prototype, хоть любой другой фворк )
В каком направлении и как двигается данный продукт мне нравится.
Больше вопросов вызывают LinqtoSQL и EntityFramework.