Реализацияшаблона MVC (Model View Controller) в ASP.NET и Visual Studio.



ASP.NET MVC– фреймворк для создания сайтов и веб-приложений с помощью реализации паттерна MVC.

Концепция паттерна (шаблона) MVC (model - view - controller) предполагает разделение приложения на три компонента:

§ Контроллер (controller)- класс, обеспечивающий связь между пользователем и системой, представлением и хранилищем данных. Он получает вводимые пользователем данные и обрабатывает их. И в зависимости от результатов обработки отправляет пользователю определенный вывод, например, в виде представления.

§ Представление (view)- визуальная часть или пользовательский интерфейс приложения. Как правило, html-страница, которую пользователь видит, зайдя на сайт.

§ Модель (model)класс, описывающий логику используемых данных.

 

В этой схеме модель является независимым компонентом- любые изменения контроллера или представления не затрагивают модель.

Контроллер и представление являются относительно независимыми компонентами, и нередко их можно изменять независимо друг от друга.

Благодаря этому реализуется концепция разделение ответственности, в связи с чем легче построить работу над отдельными компонентами.

Кроме того, вследствие этого приложение обладает лучшей тестируемостью: мы можем тестировать представление и контроллер независимо.

Структура проекта с MVC:

App_Data - файлы, ресурсы и базы данных, используемые приложением App_Start - ряд статических файлов, которые содержат логику инициализации приложения при запуске Content - вспомогательные файлы, которые не включают код на C# или javascript, и которые развертываются вместе с приложением, например, файлы стилей CSS Controllers - файлы классов контроллеров. По умолчанию в эту папку добавляются два контроллера - HomeController и AccountController fonts - дополнительные файлы шрифтов, используемых приложением Models - файлы моделей. По умолчанию Visual Studio добавляет пару моделей, описывающих учетную запись и служащих для аутентификации пользователя Scripts - каталог со скриптами и библиотеками на языке javascript Views - здесь хранятся представления. Все представления группируются по папкам, каждая из которых соответствует одному контроллеру. После обработки запроса контроллер отправляет одно из этих представлений клиенту. Также здесь имеется каталог Shared, который содержит общие для всех представления Global.asax: файл, запускающийся при старте приложения и выполняющий начальную инициализацию. Как правило, здесь срабатывают методы классов, определенных в папке App_Start Startup.cs-данный файл организует связь между OWIN и приложением. (OWIN представляет спецификацию, описывающую взаимодействие между компонентами приложения) Web.config: файл конфигурации приложения

Общая характеристика контроллеров (Controllers): создание, методы, методы действий, возвращаемые результаты, способы вызова. Примеры.

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

§ При использовании контроллеров существуют соглашения об именованииназвания контроллеров должны оканчиваться на суффикс "Controller", остальная же часть до этого префикса считается именем контроллера.

§ Чтобы обратиться контроллеру из веб-браузера, нам надо в адресной строке набрать адрес_сайта/Имя_контроллера/.

Так, по запросу адрес_сайта/Home/ система маршрутизации по умолчанию вызовет метод Index контроллера HomeController для обработки входящего запроса.

§ Если мы хотим отправить запрос к конкретному методу контроллера, то нужно указывать этот метод явно: адрес_сайта/Имя_контроллера/Метод_контроллера,

Например, адрес_сайта/Home/Buy - обращение к методу Buy контроллера HomeController.

Способы создания:

1. Создание класса, реализующего интерфейс IController.

Контроллер представляет обычный класс, который наследуется от базового класса System.Web.Mvc.Controller.

В свою очередь класс Controller реализует абстрактный базовый класс ControllerBase, а через него и интерфейс IController. Таким образом, формально, чтобы создать свой класс контроллера, достаточно создать класс, реализующий интерфейс IController и имеющий в имени суффикс Controller.

Интерфейс IController определяет один единственный метод Execute, который отвечает за обработку контекста запроса.

2. Создание контроллера за счет наследования от класса Controller

Класс Controller обеспечивает поддержку обработки запросов, которая знакома большинству разработчиков приложений MVC и предоставляет три ключевых средства:

Методы действий

Поведение контроллера разнесено по множеству методов (вместо реализации в виде единственного метода Execute()). Каждый метод действия отображается на соответствующий URL и вызывается с параметрами, извлеченными из входящего запроса.

Результаты действий

Можно возвращать объект, описывающий результат выполнения действия (например, визуализация представления либо перенаправление на другой URL или метод действия), и затем обрабатывать его каким угодно образом. Разделение между указанием результатов и их выполнением упрощает модульное тестирование.

Фильтры

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

Visual Studio предлагает удобные средства для создания контроллеров.

Чтобы ими воспользоваться, нажмем на папку Controllers правой кнопкой мыши и в появившемся меню выберем Add -> Controller....

После этого нам отобразится окно создания нового контроллера.

Далее будет предложено ввести имя, и после этого новый контроллер с единственным методом Index будет добавлен в проект.

При таком добавлении для данного контроллера будет автоматически создан каталог в папке Views, который будет хранить все представления, связанные с действиями этого контроллера

 

Методы действий (action methods):

Методы действий (action methods)представляют такие методы контроллера, которые обрабатывают запросы по определенному URL.
  • Методы Index и Buy являются методами действий или просто действиями контроллера. При получении запроса типа /Home/Index контроллер передает обработку запроса действию Index.
  • Фреймворк ASP.NET MVC позволяет определить тип обрабатываемого запроса для действия, применив к нему соответствующий атрибут: [HttpGet], [HttpPost], [HttpDelete] или [HttpPut]. Так, действие Buy разбито на два метода, по одному для каждого типа запроса.
  • Методы действий всегда имеют модификатор public. Закрытых приватных методов действий не бывает.
  • Контроллер может также включать и обычные методы (модификатор private), которые могут использоваться в вспомогательных целях.
public class HomeController : Controller { BookContext db = new BookContext(); public ActionResult Index() {    IEnumerable<Book> books = db.Books;    ViewBag.Books = books;    return View(); } [HttpGet] public ActionResult Buy(int id) {    ViewBag.BookId = id;    return View(); } [HttpPost] public string Buy(Purchase purchase) {    purchase.Date = DateTime.Now;    db.Purchases.Add(purchase);    db.SaveChanges(); return "Спасибо, " + purchase.Person + ", запокупку!"; } }  

 


Дата добавления: 2018-05-02; просмотров: 365; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!