Привязка данных Windows и MVVM
MVVM — это конструктивный шаблон архитектуры пользовательского интерфейса, предназначенный для отделения кода пользовательского интерфейса от остального кода. С помощью MVVM можно декларативно определить пользовательский интерфейс в XAML и использовать разметку привязки данных, чтобы связать его с другими слоями, содержащими данные и команды. Инфраструктура привязки данных устанавливает слабую связь, которая обеспечивает синхронизацию пользовательского интерфейса и связанных данных, а также направляет входные данные пользователя в соответствующие команды.
Так как обеспечивается слабая связь, использование привязки данных сокращает жесткие зависимости между различными видами кода. Это упрощает изменение отдельных блоков кода (методов, классов, элементов управления и т. д.) без непредвиденного побочного воздействия на другие блоки. Такое отделение является примером разделения проблем — важного принципа, применяемого во многих конструктивных шаблонах.
Преимущества MVVM
Отделение кода имеет много преимуществ, в том числе следующие.
- Возможность итеративного произвольного стиля программирования. Изолированные изменения менее опасны и более удобны для экспериментирования.
- Упрощение модульного тестирования. Блоки кода, изолированные друг от друга, можно тестировать отдельно и вне рабочих сред.
- Поддержка совместной работы команд. Несвязанный код хорошо спроектированных интерфейсов может быть разработан отдельными пользователями или командами и интегрирован позже.
- Повышение удобства обслуживания. Устранение ошибок в несвязанном коде снижает вероятность возникновения регрессий в другом коде.
В отличие от приложений MVVM, приложение с более традиционной структурой кода программной части обычно использует привязку данных только для отображаемых данных и реагирует на ввод пользователя, непосредственно обрабатывая события, предоставляемые элементами управления. Обработчики событий реализуются в файлах программной части (например, MainWindow.xaml.cs), и часто тесно связаны с элементами управления, как правило, содержащие код, который управляет пользовательским интерфейсом напрямую. Это затрудняет или делает невозможной замену элемента управления без изменения кода обработки событий. В этой архитектуре файлы программной части часто накапливают код, который не связан с пользовательским интерфейсом, например код доступа к базе данных, который в конечном итоге дублируется и изменяется для использования с другими окнами.
Уровни приложения
При использовании шаблона MVVM приложение делится на следующие уровни.
- На уровне модели определяются типы, представляющие бизнес-данные. Сюда входит все, что необходимо для моделирования основного домена приложения, и на этом уровне часто определяется основная логика приложения. Данный уровень полностью независим от уровней представления и модели представления и нередко частично размещается в облаке. Учитывая полностью реализованный уровень модели, вы можете создать несколько разных клиентских приложений, например пакет SDK для приложений Windows и веб-приложения, которые работают с теми же базовыми данными.
- На уровне представления с помощью разметки XAML определяется пользовательский интерфейс. Разметка включает в себя выражения привязки данных (например, x:Bind), определяющие связь между определенными компонентами пользовательского интерфейса и различными элементами модели представления и модели. Файлы кода программной части иногда используются на уровне представления для включения дополнительного кода, необходимого для настройки пользовательского интерфейса или работы с ним, а также для извлечения данных из аргументов обработчика событий перед вызовом метода модели представления, выполняющего основную работу.
- На уровне модели представления предоставляются цели привязки данных для представления. Во многих случаях модель представления непосредственно предоставляет модель или элементы, содержащие конкретные элементы модели. В модели представления также могут быть определены элементы для отслеживания данных, относящихся к пользовательскому интерфейсу, но не к модели. Например, можно отслеживать порядок отображения в списке элементов. Модель представления также служит точкой интеграции с другими службами, такими как код доступа к данным. Для простых проектов может не потребоваться отдельный уровень модели. В этих случаях может быть достаточно модели представления, которая инкапсулирует все необходимые данные.
Базовые и расширенные шаблоны MVVM
Как и в случае с любым конструктивным шаблоном, существует несколько способов реализации MVVM, и множество разных методов относится к MVVM. По этой причине существует несколько разных сторонних платформ MVVM, поддерживающих различные платформы на основе XAML, включая пакет SDK для приложений Windows. Однако эти платформы обычно включают в себя несколько служб для реализации несвязанной архитектуры, что делает точное определение MVVM несколько неоднозначным.
Хотя сложные платформы MVVM могут быть очень полезными, особенно для проектов корпоративного уровня, обычно внедрение любого конкретного шаблона или метода требует определенных затрат, и преимущества не всегда очевидны, в зависимости от масштаба и размера вашего проекта. К счастью, вы можете использовать только те методы, которые предоставляют очевидные и ощутимые преимущества, и игнорировать прочие, пока они не понадобятся.
В частности, вы можете получить много преимуществ, просто изучив и применив всю мощь привязки данных и разделив логику приложения на уровни, описанные выше. Это можно достичь только с помощью возможностей, предоставляемых пакетом SDK для приложений Windows, и без использования внешних платформ. В частности, расширение разметки {x:Bind} повышает простоту и эффективность привязки данных по сравнению с предыдущими платформами XAML, устраняя необходимость в большом объеме стандартного кода, требовавшегося ранее.
Дополнительные инструкции по использованию базовой MVVM в базовой версии MVVM см . в примере UWP базы данных заказов клиентов на сайте GitHub. Многие из других примеров приложений UWP также используют базовую архитектуру MVVM, а пример приложения-трафика UWP включает как код-заднюю, так и версии MVVM, при этом примечания описывают преобразование MVVM.
См. также
Разделы
Подробно о привязке данных
Расширение разметки {x:Bind}
Примеры MVVM UWP
Пример базы данных заказов клиентов
Пример инвентаризации VanArsdel
Пример приложения для управления трафиком
Windows developer