Описание архитектуры .NET MAUI

Завершено

Распространенный шаблон для кроссплатформенной разработки приложений, — отделить реализацию бизнес-логики от пользовательского интерфейса, а затем создать разные пользовательские интерфейсы и разную логику для них для каждой платформы. Хотя бизнес-логика остается неизменной для каждого типа устройства, код управления приложением и отображения данных может различаться. Эта дисперсия обусловлена различными возможностями, API и функциями, предоставляемыми устройствами. Создание мультиплатформенного приложения таким образом включает в себя не только отдельные пакеты SDK, но и совершенно разные языки и наборы инструментов.

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

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

Что собой представляет технологический стек .NET MAUI?

.NET предоставляет набор разных платформ для создания приложений на разных платформах: .NET для Android, .NET для iOS (и iPadOS), .NET для Mac и WinUI 3 (на основе Windows App SDK). Все эти платформы имеют доступ к одной библиотеке базовых классов (BCL) .NET 6. Эта библиотека предоставляет функциональные возможности для создания ресурсов и управления ими, а также для абстрагирования сведений о базовом устройстве от кода. Библиотека BCL имеет зависимость от среды выполнения .NET, в которой выполняется код приложения. Для ОС Android, iOS (и iPadOS) и macOS эту среду предоставляет Mono, специальная реализация среды .NET с открытым кодом. Для Windows ту же роль выполняет win32, которая оптимизирована для платформы Windows.

Хотя BCL позволяет приложениям, работающим на разных типах устройств, совместно использовать общую бизнес-логику, различные платформы имеют различные способы определения пользовательского интерфейса приложения. Платформы предоставляют различные модели для указания взаимодействия и взаимодействия элементов пользовательского интерфейса. Вы можете создать пользовательский интерфейс для каждой платформы отдельно с помощью соответствующей платформы (.NET для Android, .NET для iOS, .NET для Mac или WinUI 3), но этот подход требует поддержания базы кода для каждого отдельного семейства устройств. .NET MAUI предоставляет единую платформу для создания пользовательских интерфейсов в мобильных и классических приложениях. Вы создаете пользовательский интерфейс с помощью этой платформы (со стрелкой 1 на следующей схеме), и .NET MAUI заботится о преобразовании его на соответствующую платформу (стрелка 2).

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

Diagram of the .NET MAUI technology stack and how to implement a platform-specific feature.

Как работает .NET MAUI?

.NET MAUI абстрагирует реализацию элемента пользовательского интерфейса из его логического описания. Пользовательский интерфейс можно описать на платформенно-независимом языке XAML на основе XML. Например, следующий фрагмент XAML показывает описание элемента управления кнопкой:

<Button Text="Click me"
        SemanticProperties.Hint="Counts the number of times you click"
        Clicked="OnCounterClicked"
        HorizontalOptions="Center" />

В этом примере определяется метка кнопки ("Щелкнуть меня") и указывает, что метод с именем OnCounterClicked должен выполняться, когда пользователь выбирает кнопку. Другие свойства могут изменять макет кнопки и формат текста, например здесь текст выравнивается по центру кнопки. Семантические свойства обеспечивают поддержку специальных возможностей для пользователей с нарушениями зрения.

.NET MAUI всегда создает машинный код для каждого целевого устройства, поэтому гарантирует оптимальную производительность. .NET MAUI использует отдельные обработчики для каждой платформы и для каждого элемента пользовательского интерфейса, которые выполняют операции. Например, если вы создает приложение для среды iOS, обработчик .NET MAUI сопоставляет код с объектом iOS UIButton. При работе на Android вы получите код для объекта Android AppCompatButton. Доступ к этим обработчикам выполняется косвенно, через предоставляемый .NET MAUI интерфейс для конкретного элемента управления, например IButton для кнопки.

Diagram of how .NET MAUI maps a XAML control to a native control. It shows the .NET MAUI control implements an interface that each native handler also implements.

Примечание.

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

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

  • Продуманный механизм визуализации для проектирования страниц.
  • Несколько типов страницы для создания полнофункциональных типов навигации, таких как панели.
  • Поддержка привязки данных для более элегантных и обслуживаемых шаблонов разработки.
  • Возможность создавать пользовательские обработчики для улучшения способа представления элементов пользовательского интерфейса.
  • Доступ к собственным API напрямую и абстракции многих распространенных потребностей мобильных и классических приложений, которые отделены от пользовательского интерфейса. Библиотека основных компонентов позволяет приложению получать доступ к таким вещам, как GPS, акселерометр и состояния батареи и сети. В этой библиотеке также доступны десятки датчиков и служб, типичных для разработки мобильных приложений.

Проверка знаний

1.

Какая среда обеспечивает поддержку среды выполнения для приложения WinUI 3?

2.

Какой язык разметки можно использовать для размещения пользовательского интерфейса в приложении .NET MAUI?