Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Чтобы добавить в проект поддержку этих таблиц, создадим с помощью мастера Linq To Sql классы для работы. Получившийся DBML-файл будет представлять схему, показанную на рис. 6.3.

После создания классов Linq To Sql настало время создать логику по регистрации маршрутов в механизме маршрутизации. Для этого создадим класс DatabaseRoutes, представленный в листинге 6.2.

Листинг 6.2.

Класс DatabaseRoutes

using System.Linq;

using System.Web.Mvc;

using System.Web.Routing;

namespace Routing {

public class DatabaseRoutes

{

readonly RouteDbDataContext db = new RouteDbDataContext;

private readonly RouteCollection Routes;

public DatabaseRoutes(RouteCollection routes)

{

Routes = routes;

}

public void Register

{

var routes = db.RouteItems.Where(x => x.State).OrderBy(x => x.LoadOrder);

foreach (var route in routes)

{

RouteValueDictionary defaults = new RouteValueDictionary;

foreach (var param in route.Params)

defaults.Add(param.ParamKey, param.ParamValue);

Routes.Add(route.Name, new Route(

route.Template,

defaults,

new MvcRouteHandler

));

}

}

}

}

Обратите внимание, конструктор-класс DatabaseRoute принимает параметр типа RouteColection, для того чтобы произвести регистрацию маршрутов. Единственный метод класса Register предназначен для выборки данных из базы данных и инициализации механизма маршрутизации в виде полученного экземпляра RouteColection.

Для того чтобы использовать наш класс, необходимо заполнить таблицы значениями. Сделаем это для определения стандартного маршрута Default так, как представлено на рис. 6.4 и 6.5.

После того как данные внесены в базу данных, можно интегрировать механизм в проект. Для этого следует в global.asax удалить старое определение маршрута Default и добавить инициализацию класса DatabaseRotes так, как показано в следующем фрагменте кода:

public static void RegisterRoutes(RouteCollection routes)

{

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

DatabaseRoutes dbRoutes = new DatabaseRoutes(routes);

dbRoutes.Register;

}

Если вы сделали все правильно, то результатом будет работа вашего проекта на основе маршрута, полученного из базы данных. Теперь, реализовав каким-либо образом доступ к базе данных маршрутов, вы получите возможность предоставить функции редактирования маршрутов администратору без модификации исходных кодов в виде global.asax.

Представленный пример предполагает

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

Маршрутизация и тестирование

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

Здесь мы на нескольких примерах рассмотрим, как включить в свой проект тесты маршрутов, ограничений и маршрутов игнорирования.

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

Для тестирования маршрутов воспользуемся тремя популярными средствами:

? NUnit — альтернативное средство тестирования;

? RhinoMocks — позволяет создавать фальшивые, так называемые, "мок-объекты";

? MvcContrib — содержит функционал, расширяющий возможности MVC Framework, в том числе и в сфере модульного тестирования.

Подготовка инструментов

Для того чтобы использовать инструменты тестирования в своем проекте, необходимо проделать следующие действия. Во-первых, установите пакет тестирования NUnit. Во-вторых, добавьте в проект ссылки на сборки:

MvcContrib.TestHelper.nunit.framework и Rhino.Mocks так, как показано на рис. 6.6.

После этих двух шагов вы готовы для создания модульных тестов механизма маршрутизации. Для тестирования в MvcContrib существует набор специальных методов расширения, которые позволяют значительно упростить создание тестов. Это метод ShouldMapTo<T>, который позволяет протестировать строку определения маршрута, и метод ShouldBeIgnored, который позволяет протестировать правило игнорирования маршрута.

Создание тестов

Для демонстрации создания модульных тестов первым делом определим набор маршрутов, которые будут подвергнуты тестам. Далее представлен фрагмент кода с определением ряда маршрутов:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(

"Product",

"Product/{id}",

new { controller = "Product", action = "GetById" }

);

Поделиться:
Популярные книги

7 историй для девочек

Дюма-отец Александр
Детские:
детская проза
4.75
рейтинг книги
7 историй для девочек

Том 6. Проза, письма

Лермонтов Михаил Юрьевич
6. Собрание сочинений в шести томах
Проза:
русская классическая проза
5.25
рейтинг книги
Том 6. Проза, письма

Шайтан Иван 5

Тен Эдуард
5. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
5.50
рейтинг книги
Шайтан Иван 5

Посланник

Иевлев Геннадий Васильевич
2. Страж
Фантастика:
научная фантастика
космическая фантастика
5.00
рейтинг книги
Посланник

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Золото Вильгельма (сборник)

Искандер Фазиль Абдулович
Проза:
современная проза
5.00
рейтинг книги
Золото Вильгельма (сборник)

Разговоры запросто

Роттердамский Эразм
Научно-образовательная:
философия
5.00
рейтинг книги
Разговоры запросто

Собрание сочинений. Т. 20. Плодовитость

Золя Эмиль
Проза:
классическая проза
5.00
рейтинг книги
Собрание сочинений. Т. 20. Плодовитость

Дорога ветров

Уильямс Тэд
3. Орден Манускрипта
Фантастика:
фэнтези
7.75
рейтинг книги
Дорога ветров

Теплый шоколад на десерт

primavera
Детективы:
прочие детективы
5.00
рейтинг книги
Теплый шоколад на десерт

Конан из Киммерии

Говард Роберт Ирвин
Шедевры фантастики
Фантастика:
фэнтези
боевая фантастика
6.25
рейтинг книги
Конан из Киммерии

Victory значит победа

Tora_san
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Victory значит победа

Ночной молочник

Курков Андрей Юрьевич
Детективы:
триллеры
6.25
рейтинг книги
Ночной молочник

Двадцать и двадцать один. Наивность

Das_Leben
Детективы:
триллеры
5.00
рейтинг книги
Двадцать и двадцать один. Наивность