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