ASP.NET MVC Framework - [10]

Шрифт
Интервал

>        page.txtFirstName.Text = "Иван";

>        page.txtLastName.Text = "Кузнецов";

>      }

>    }

>  }

>}


Листинг 2.5. Модифицированный файл Default.aspx.cs

>using System;

>using WebFormsMvc.Controllers;

>namespace WebFormsMvc {

>public partial class _Default:System.Web.UI.Page {

>  protected DefaultPageController controller;

>  protected void btnSave_Click(object sender, EventArgs e)

>  {

>    controller.ButtonSaveClick();

>  }

>  protected void Page_Load(object sender, EventArgs e)

>  {

>    controller = new DefaultPageController(this);

>    controller.PageLoad();

>  }

>}


Теперь, когда логика страницы вынесена в отдельную сущность — контроллер, есть возможность тестирования логики в отрыве от представления. Для этого достаточно создать экземпляр класса контроллера и передать ему проинициализированный объект модели. Поскольку в качестве модели выступает ASPX-страница, необходимо создать экземпляр класса страницы и про-инициализировать значащие элементы управления, поскольку при тестировании не будут задействованы внутренние механизмы создания экземпляров страниц.

В листинге 2.6 приведен простейший unit-тест для проверки обработчика события загрузки страницы.


Листинг 2.6. Unit-тест для события загрузки страницы

>[TestMethod]

>public void TestPageLoad()


>  _Default page = new _Default();

>  page.txtFirstName = new TextBox();

>  page.txtLastName = new TextBox();

>  DefaultPageController controller = new DefaultPageController(page);

>  controller.PageLoad();

>  Assert.AreEqual(page.txtLastName.Text, "Кузнецов");

>}


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

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

Совмещение WebForms и MVC Framework в рамках одного веб-приложения

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

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

Использование элементов управления WebForms в MVC-приложениях

Поскольку в MVC Framework в качестве движка представлений по умолчанию используется стандартный механизм ASPX-страниц, то можно попробовать использовать существующие элементы управления на MVC-страницах. Однако нужно помнить о том, что для представлений в MVC-приложениях не работает стандартный механизм обработки событий, и элементы управления теряют свои серверные возможности по обработке событий. Поэтому для подобного использования пригодны элементы управления, представляющие ценность на этапе первоначальной генерации разметки, отправляемой пользователю, такие как, например, >Repeater или >GridView.

Чтобы продемонстрировать эту возможность, используем декларативный источник данных >sqlDataSource и >GridView в представлении Index.aspx, в результате получим страницу, приведенную на рис. 2.1. Код страницы приведен в листинге 2.7.


Листинг 2.7. Страница Index.aspx

><%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

>  Inherits="System.Web.Mvc.ViewPage" %>


>

>           runat="server">

>  Home Page

>


>

>          runat="server">

>    <%= Html.Encode(ViewData["Message"]) %>

>   

>      ConnectionString="<%$ ConnectionStrings:ConnectionString %>"

>      SelectCommand="SELECT * FROM [Persons]">

>    <>/asp:SqlDataSource>


>   

>        AutoGenerateColumns="False"

>        DataKeyNames="PersonId" DataSourceID="SqlDataSource1">

>      

>        

>          HeaderText="PersonId" InsertVisible="False"

>          ReadOnly="True" SortExpression="PersonId" />


>       

>          HeaderText="LastName" SortExpression="LastName" />

>       

>          HeaderText="FirstName" SortExpression="FirstName" />

>      

>   

>



Результат обращения к действию


Рекомендуем почитать
Черный список

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


Добавьте в корзину. Ключевые принципы повышения конверсии веб-сайтов

Работа сайта похожа на работу обычного магазина: если секции с разными товарами расположены логично, консультанты доступны в любой момент, а описания товаров информативны и понятны, есть шанс, что человек, зашедший в магазин, не уйдет с пустыми руками. Проанализируйте характеристики ваших потенциальных клиентов, поймите, что для них является ценностью, какие аргументы привлекут их внимание, соответственно этому продумайте структуру сайта, спроектируйте «маршрут» передвижения и составьте описания товаров – и ваши посетители будут гораздо чаще, чем сейчас, кликать на значок «корзины», а вы в разы повысите один из главных показателей работы сайта – конверсию.


Google. Прорыв в духе времени

Эта книга – захватывающая история самой успешной Интернет-компании в мире. В последнее время финансовый результат деятельности Google Inc. превосходит даже самые смелые ожидания инвестиционных аналитиков.Целеустремленность, научный талант, творческий поиск, смелость и любовь к эксперименту основателей компании – бывшего москвича Сергея Брина и выходца из штата Мичиган Ларри Пейджа – проложили путь к долгосрочному успеху компании. Под их руководством поисковый механизм Google стал популярнейшим ресурсом, который пользователи любят за удобство и уже испытывают к нему сильную эмоциональную привязанность.


Даркнет: Война Голливуда против цифровой революции

«Даркнет» – это рассказ о цифровой революции в мире медиа. В битве между технологическим прогрессом и медиа-магнатами решается будущее кино, музыки, телевидения, компьютерных игр и Интернета. В этой книге вы найдете истории людей, оказавшихся в эпицентре битвы. «Даркнет» увлечет вас в тайный мир киноподполья, где бутлегеры и пираты скрываются от закона и Голливуда. Но не только в подполье делается цифровая революция: множеству приверженцев цифрового образа жизни, творцам фан-фикшн, диджеев, кинематографистам-любителям, пионерам телевидения нового поколения и разработчикам игр приходится противостоять могущественным силам, стремящимся сохранить статус-кво.


Противодействие черному PR в Интернете

Черный PR сегодня активно перемещается в Интернет. В свое время кольт сделал людей равными. Сегодня Интернет уравнял финансово сильных и слабых в медиапространстве. Глобальная сеть позволяет рядовому человеку разорить могущественную корпорацию. Маленькая компания может эффективно противостоять транснациональному монстру, не располагая никакими финансами. Умение отражать информационные атаки стало на редкость насущной проблемой для любого бизнеса.В этой книге показаны все необходимые для отражения информационного нападения в Интернет инструменты и раскрыты секреты их применения.


Образование русскоязычного сегмента Фидонет в Западной Европе

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