ASP.NET Core MVC

Введение в MVC

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 16.11.2019

Одним из отличительных моментов платформы ASP.NET Core является применение паттерна MVC. Причем последняя версия MVC-фреймворка, который применяется в ASP.NET Core, имеет номер 5.0. Поэтому важно не путать ASP.NET MVC 5, который применяется в ASP.NET 4.5-4.8, и фреймворк MVC, который применяется в ASP.NET Core. Хотя во многих аспектах эти фремйоворки будут совпадать.

Также неверно отождествлять ASP.NET Core всецело с фреймворком ASP.NET Core MVC. Фреймворк ASP.NET Core MVC работает поверх платформы ASP.NET Core, и предназначен для того, чтобы упростить создание приложения. Но мы можем и не использовать MVC, а применять чистый ASP.NET Core и на нем всецело выстраивать логику приложения.

Сам паттерн MVC не является какой-то новой идеей в архитектуре приложений, он появился еще в конце 1970-х годов в компании Xerox как способ организации компонентов в графическом приложение на языке Smalltalk.

Концепция паттерна MVC предполагает разделение приложения на три компонента:

  • Модель (model): описывает используемые в приложении данные, а также логику, которая связана непосредственно с данными, например, логику валидации данных. Как правило, объекты моделей хранятся в базе данных.

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

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

  • Представление (view): отвечают за визуальную часть или пользовательский интерфейс, нередко html-страница, через который пользователь взаимодействует с приложением. Также представление может содержать логику, связанную с отображением данных. В то же время представление не должно содержать логику обработки запроса пользователя или управления данными.

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

Отношения между компонентами паттерна можно описать следующей схемой:

Паттерн MVC в программировании

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

Такое разграничение компонентов приложения позволяет реализовать концепцию разделение ответственности, при которой каждый компонент отвечает за свою строго очерченную сферу. В связи с чем легче построить работу над отдельными компонентами. И благодаря этому приложение легче разрабатывать, поддерживать и тестировать отдельные компоненты. Допустим, если нам важна визуальная часть или фронтэнд, то мы можем тестировать представление независимо от контроллера. Либо мы можем сосредоточиться на бэкэнде и тестировать контроллер.

Однако неверно полностью ассоциировать всю платформу ASP.NET Core с MVC. MVC - это лишь паттерн, который реализуется в рамках платформы. Мы можем создать проект по шаблону Empty где не будет никаких контроллеров, моделей, представлений, где будет один класс Startup. И через этот класс построить всю обработку запроса. Но естественно применение MVC облегчает разработку приложений.

Для создания проекта, применяющего MVC, нам надо выбрать шаблон ASP.NET Core Web App (Model-View-Controller):

Фреймворк ASP.NET MVC Первый проект на ASP.NET MVC Core

Оставим все настройки по умолчанию и нажмем на ОК. И Visual Studio создаст новый проект MVC.

Структура создаваемого проекта будет отличаться от структуры проекта по типу Empty. В частности, мы увидим ряд новых папок и файлов:

Структура проекта ASP.NET MVC Core
  • Dependencies: все добавленные в проект пакеты и библиотеки

  • wwwroot: этот узел (на жестком диске ему соответствует одноименная папка) предназначен для хранения статических файлов - изображений, скриптов javascript, файлов css и т.д., которые используются приложением. Цель добавления этой папки в проект по сравнению с другими версиями ASP.NET, состоит в разграничении доступа к статическим файлам, к которым разрешен доступ со стороны клиента и к которым доступ запрещен.

  • Controllers: папка для хранения контроллеров, используемых приложением

  • Models: каталог для хранения моделей

  • Views: каталог для хранения представлений

  • appsettings.json: хранит конфигурацию приложения

  • Program.cs: файл, определяющий класс Program, который инициализирует и запускает хост с приложением.

  • Startup.cs: файл, определяющий класс Startup, с которого начинается работа приложения. То есть это входная точка в приложение.

Фактически эта та же структура, что и у проекта по типу Empty за тем исключением, что здесь также добавлены по умолчанию папки для ключевых компонентов фреймворка MVC: контроллеров и представлений. А также есть дополнительные узлы и файлы для управления зависимостями клиентской части приложения.

И если мы запустим проект на выполнение, то сработает запрос к контроллеру по умолчанию - классу HomeController, который выберет для генерации ответа нужное представление. И в итоге из представления будет создана html-страница, которую мы увидим в своем веб-браузере:

Первый проект на ASP.NET MVC Core
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850