Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
Шрифт:
Интервал:
Закладка:
Введение в паттерн MVC
Паттерн "модель-представление-контроллер" (Model-View-Controller — MVC) появился в 1970-х годах, будучи первоначально созданным для использования в Smalltalk. Относительно недавно его популярность возросла, в результате чего стали доступными реализации в различных языках, в том числе Java (Spring Framework), Ruby (Ruby on Rails) и .NET (ASP.NET MVC).
Модель
Модель — это данные в приложении. Данные обычно представляются с помощью простых старых объектов CLR (plain old CLR object — POCO). Модели представлений состоят из одной или большего числа моделей и приспособлены специально для потребителя данных. Воспринимайте модели и модели представлений как таблицы базы данных и представления базы данных.
С академической точки зрения модели должны быть в высшей степени чистыми и не содержать правила проверки достоверности или любые другие бизнес-правила. С практической точки зрения тот факт, содержит модель логику проверки достоверности или другие бизнес-правила, целиком зависит от применяемого языка и инфраструктур, а также специфических потребностей приложения. Например, в инфраструктуре EF Core присутствует много аннотаций данных, которые имеют двойное назначение: механизм для формирования таблиц базы данных и средство для проверки достоверности в веб-приложениях ASP.NET Core. Примеры, приводимые в книге, сконцентрированы на сокращении дублированного кода, что приводит к размещению аннотаций данных и проверок достоверности там, где в них есть наибольший смысл.
Представление
Представление — это пользовательский интерфейс приложения. Представление принимает команды и визуализирует результаты команд для пользователя. Представление обязано быть как можно более легковесным и не выполнять какую-то фактическую работу, а передавать всю работу контроллеру.
Контроллер
Контроллер является своего рода мозговым центром функционирования. Контроллеры принимают команды/запросы от пользователя (через представления) или клиента (через обращения к API-интерфейсу) посредством методов действий и надлежащим образом их обрабатывают. Результат операции затем возвращается пользователю или клиенту. Контроллеры должны быть легковесными и использовать другие компоненты или службы для обработки запросов, что содействует разделению обязанностей и улучшает возможности тестирования и сопровождения.
ASP.NET Core и паттерн MVC
С помощью ASP.NET Core можно создавать много типов веб-приложений и служб. Двумя вариантами являются веб-приложения, в которых применяются паттерн MVC и службы REST. Если вы имели дело с "классической" инфраструктурой ASP.NET, то знайте, что они аналогичны соответственно ASP.NET MVC и ASP.NET Web API. Типы веб-приложений МУС и приложений API разделяют часть "модель" и "контроллер" паттерна МУС, в то время как веб-приложения МУС также реализуют "представление", завершая паттерн МУС.
ASP.NET Core и .NET Core
Точно так же, как Entity Framework Core является полной переработкой Entity Framework 6, инфраструктура ASP.NET Core — это переработка популярной инфраструктуры ASP.NET Framework. Переписывание ASP.NET было нелегкой, но необходимой задачей, преследующей цель устранить зависимости от System.Web. Избавление от указанной зависимости позволило запускать приложения ASP.NET под управлением операционных систем, отличающихся от Windows, и веб-серверов помимо Internet Information Services (IIS), включая размещаемые самостоятельно. В итоге у приложений ASP.NET Core появилась возможность использовать межплатформенный, легковесный и быстрый веб-сервер с открытым кодом под названием Kestrel, который предлагает унифицированный подход к разработке для всех платформ.
На заметку! Изначально продукт Kestrel был основан на LibUV, но после выпуска ASP.NET Core 2.1 он базируется на управляемых сокетах.
Подобно EF Core инфраструктура ASP.NET Core разрабатывается в виде проекта с полностью открытым кодом на GitHub (https://github.com/aspnet). Она также спроектирована как модульная система пакетов NuGet. Разработчики устанавливают только те функциональные средства, которые нужны для конкретного приложения, сводя к минимуму пространство памяти приложения, сокращая накладные расходы и снижая риски в плане безопасности. В число дополнительных улучшений входят упрощенный запуск, встроенное внедрение зависимостей, более чистая система конфигурирования и подключаемое промежуточное программное обеспечение (ПО).
Одна инфраструктура, много сценариев использования
В оставшихся главах этой части вы увидите, что в ASP.NET Core внесено множество изменений и усовершенствований. Помимо межплатформенных возможностей еще одним значительным изменением следует считать унификацию инфраструктур для создания веб- приложений. В рамках ASP.NET Core инфраструктуры ASP.NET MVC, ASP.NET Web API и Razor Pages объединены в единую инфраструктуру для разработки. Разработка веб-приложений и служб с применением полной инфраструктуры .NET Framework предоставляла несколько вариантов, включая Web Forms, MVC, Web API, Windows Communication Foundation (WCF) и WebMatrix. Все они имели положительные и отрицательные стороны; одни были тесно связаны между собой, а другие сильно отличались друг от друга. Наличие стольких доступных вариантов означало, что разработчики обязаны были знать каждый из них для выбора того, который подходит для имеющейся задачи, или просто отдавать предпочтение какому-то одному и положиться на удачу.
С помощью ASP.NET Core вы можете строить приложения, которые используют Razor Pages, паттерн MVC, службы REST и одностраничные приложения, где применяются библиотеки JavaScript вроде Angular либо React. Хотя визуализация пользовательского интерфейса зависит от выбора между MVC, Razor Pages или библиотеками JavaScript, лежащая в основе среда разработки остается той же самой. Двумя прежними вариантами, которые не были перенесены в ASP.NET Core, оказались Web Forms и WCF.
На заметку! Поскольку все обособленные инфраструктуры объединены вместе под одной крышей, прежние названия ASP.NET MVC и ASP.NET Web API официально были изъяты из употребления. Для простоты в этой книге веб-приложения ASP . NET Core, использующие паттерн "модель-представление-контроллер", упоминаются как MVC, а REST-службы ASP.NET - как Web API.
Функциональные средства ASP.NET Core из MVC/Web API
Многие проектные цели и функции, которые побудили разработчиков применять ASP.NET MVC и ASP.NET Web API, по-прежнему поддерживаются в ASP.NET Core (и были улучшены).
Ниже перечислены некоторые из них (но далеко не все):
• соглашения по конфигурации (convention over configuration; или соглашение над конфигурацией, если делать акцент на преимуществе соглашения перед конфигурацией);
• контроллеры и действия;
• привязка моделей;
• проверка достоверности моделей;
• маршрутизация;
• фильтры;
• компоновки и представления Razor.
Они рассматриваются в последующих разделах за исключением компоновок и представлений Razor, которые будут