Поделиться через


Характеристики современных веб-приложений

Подсказка

Это фрагмент из книги, архитектор современных веб-приложений с ASP.NET Core и Azure, доступный в .NET Docs или в виде бесплатного скачиваемого PDF-файла, который можно прочитать в автономном режиме.

Архитектура современных веб-приложений с ASP.NET Core и Azure, миниатюра обложки электронной книги.

"… При правильном проектировании использование функций становится дешевле. Этот подход является трудным, но продолжает успешно работать".
- Деннис Ричи

Современные веб-приложения имеют более высокие ожидания пользователей и больше требований, чем когда-либо раньше. Ожидается, что современные веб-приложения будут доступны 24/7 из любого места в мире и доступны практически от любого устройства или размера экрана. Веб-приложения должны быть безопасными, гибкими и масштабируемыми, чтобы эффективно справляться с резкими скачками нагрузки. Все более сложные сценарии должны обрабатываться богатыми пользовательскими интерфейсами, созданными на клиенте с помощью JavaScript, и эффективно взаимодействовать через веб-API.

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

Эталонное приложение: eShopOnWeb

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

eShopOnWeb

Рис. 2-1. eShopOnWeb

Эталонное приложение

Размещенные в облаке и масштабируемые

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

Кроссплатформенное решение

ASP.NET Core является кроссплатформенным и может работать в Linux, macOS и Windows. Эта возможность открывает множество новых возможностей для разработки и развертывания приложений, созданных с помощью ASP.NET Core. Контейнеры Docker — как для Linux, так и для Windows — могут размещать ASP.NET Core приложения, что позволяет им воспользоваться преимуществами контейнеров и микрослужб.

Модульные и слабо связанные

Пакеты NuGet — это важная часть .NET Core, и приложения ASP.NET Core составлены с помощью многих библиотек NuGet. Эта степень детализации функций помогает гарантировать, что приложения зависят только от функциональных возможностей, которые они на самом деле требуют, сокращая их объем и область поверхности уязвимостей безопасности.

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

Простое тестирование с помощью автоматизированных тестов

ASP.NET Core приложения поддерживают модульное тестирование, а их свободное связывание и поддержка внедрения зависимостей упрощает замену вопросов инфраструктуры фальшивыми реализациями для тестирования. ASP.NET Core также поставляется с TestServer, который можно использовать для размещения приложений в памяти. После этого функциональные тесты могут выполнять запросы к этому серверу в памяти, обрабатывая весь стек приложений (включая промежуточные слои, маршрутизацию, привязку модели, фильтры и т. д.) и получая ответ за долю времени, которую потребовало бы размещение приложения на реальном сервере и выполнение запросов через сетевой уровень. Эти тесты особенно просты в написании и полезны для API, которые все чаще важны в современных веб-приложениях.

Поддерживаются традиционные и SPA-режимы работы

Традиционные веб-приложения использовали минимальное поведение на стороне клиента, но вместо этого опирались на сервер для всех перемещений, запросов и обновлений, которые нужно выполнить. Каждая новая операция, сделанная пользователем, будет переведена в новый веб-запрос, а результатом является полная перезагрузка страницы в браузере конечного пользователя. Классические моделиView-Controller (MVC) обычно следуют этому подходу: каждый новый запрос соответствует другому действию контроллера, которое, в свою очередь, работает с моделью и возвращает представление. Некоторые отдельные операции на данной странице могут быть улучшены с помощью функций AJAX (асинхронного JavaScript и XML), но общая архитектура приложения использовала множество различных представлений MVC и конечных точек URL-адресов. Кроме того, ASP.NET Core MVC также поддерживает Razor Pages, проще упорядочивать страницы в стиле MVC.

Одностраничные приложения (SPA), напротив, включают очень мало динамически создаваемых серверных загрузок страниц (если таковые есть). Многие SPA инициализируются при помощи статического HTML-файла, который загружает необходимые библиотеки JavaScript для начала и работы приложения. Эти приложения активно используют веб-API для своих потребностей в данных и могут обеспечить значительно более богатый пользовательский опыт. Blazor WebAssembly предоставляет средства создания spAs с помощью кода .NET, который затем запускается в браузере клиента.

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

Простая разработка и развертывание

ASP.NET Основные приложения можно писать с помощью простых текстовых редакторов и интерфейсов командной строки или полнофункционированных сред разработки, таких как Visual Studio. Монолитные приложения обычно развертываются в одной конечной точке. Развертывания можно легко автоматизировать в рамках конвейера непрерывной интеграции (CI) и непрерывной доставки (CD). Помимо традиционных средств CI/CD Microsoft Azure имеет встроенную поддержку репозиториев Git и может автоматически развертывать обновления по мере их создания в указанной ветви или теге Git. Azure DevOps предоставляет полнофункциональный конвейер сборки и развертывания CI/CD, а GitHub Actions предоставляет еще один вариант для проектов, размещенных там.

Традиционные ASP.NET и веб-формы

Помимо ASP.NET Core традиционные ASP.NET 4.x по-прежнему являются надежной и надежной платформой для создания веб-приложений. ASP.NET поддерживает модели разработки MVC и веб-API, а также веб-формы, которые хорошо подходят для разработки насыщенных приложений на основе страниц и обладают богатой экосистемой компонентов сторонних производителей. Microsoft Azure имеет большую поддержку ASP.NET приложений 4.x, и многие разработчики знакомы с этой платформой.

Blazor

Blazor включается в ASP.NET Core 3.0 и более поздних версий. Он предоставляет новый механизм создания расширенных интерактивных веб-клиентских приложений с помощью Razor, C# и ASP.NET Core. Он предлагает другое решение, которое следует учитывать при разработке современных веб-приложений. Существует две версии Blazor : серверная и клиентская.

Серверная часть Blazor была выпущена в 2019 году с ASP.NET Core 3.0. Как следует из его названия, он выполняется на сервере, перенаправляя изменения в клиентском документе обратно в браузер по сети. Серверная сторона Blazor обеспечивает широкий интерфейс клиента, не требуя клиентского JavaScript и не требуя отдельной загрузки страницы для каждого взаимодействия с клиентской страницей. Изменения на загруженной странице запрашиваются и обрабатываются сервером, а затем отправляются клиенту с помощью SignalR.

Клиентская сторона Blazor, выпущенная в 2020 году, убирает необходимость обработки изменений на сервере. Вместо этого он использует WebAssembly, чтобы запускать код .NET внутри клиента. Клиент по-прежнему может вызывать API к серверу при необходимости запрашивать данные, но все поведение на стороне клиента выполняется через клиент WebAssembly, который уже поддерживается всеми основными браузерами и является просто библиотекой JavaScript.

Ссылки — современные веб-приложения