Выбрать главу

Отсутствие полного контроля над конечной разметкой страницы. Поскольку в технологии WebForms генерация HTML-кода отдана на уровень элементов управления, разработчик не имеет полного контроля над финальной разметкой страницы, загружаемой в браузер пользователя. В большинстве случаев это не является проблемой, пока не возникает необходимости создавать большое количество клиентского кода, работающего с моделью документа HTML-страницы — в этом случае создание обходных путей может занять недопустимо много времени.

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

Неестественная для веб-среды модель сохранения состояния. Модель событий и хранения состояния, являющаяся преимуществом WebForms и позволяющая создавать веб-приложения по образу и подобию настольных приложений, является и недостатком этой модели. HTTP-протокол не поддерживает состояния и, при попытке это состояние добавить в жизненный цикл приложения, приходится создавать нагромождения дополнительного слоя логики, отвечающего за работу с состоянием. При использовании большого количества элементов на странице скрытое поле ViewState, используемое для хранения состояния между отправками данных формы на сервер, может достигать больших размеров, существенно влияя на скорость передачи данных между сервером и клиентом. В этом случае разработчику приходится приложить дополнительные усилия по оптимизации хранимых данных о состоянии, использовать другие механизмы для хранения состояния и так или иначе вмешиваться в стандартную модель WebForms.

Технология MVC Framework

В главе 1 были перечислены некоторые преимущества архитектурного подхода MVC и реализации в MVC Framework. Здесь же мы подробнее остановимся на достоинствах и недостатках MVC Framework в сравнении с WebForms.

Преимущества MVC Framework

Четкое разделение логических слоев. Отделение представления от контроллера предоставляет возможность простой замены движка представления без модификации кода контроллера, независимость от реализации модели позволяет описать только интерфейсы объектов и подменять реализацию при необходимости.

Полный контроль над разметкой. Возможность получить "чистый" HTML-код значительно упрощает разработку и поддержку клиентского JavaScript-кода.

Логическое разделение функциональности. В веб-приложениях MVC есть четкое разделение на действия контроллеров, и каждое действие имеет собственный URI. В случае WebForms страница может инкапсулировать различную логику работы страницы и сохранять тот же самый URI, например Default.aspx, при выполнении операций со страницей. В MVC-приложении разные действия, инициируемые страницей, соответствуют различным действиям контроллера. Так, например, метод Edit контроллера возвращает страницу, а метод Update используется для обновления данных и отображения сообщения об изменении данных.

"Красивые" URL-адреса. Поскольку MVC Framework предполагает использование гибкой системы маршрутизации, пользователь получает удобные и понятные URL-адреса страниц в виде /Products/List, /Products/Edit/1 и т. п.

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