Модель – представление – модель представления ( MVVM ) - это программный архитектурный шаблон, который облегчает разделение разработки графического пользовательского интерфейса ( представления ) - будь то с помощью языка разметки или кода графического интерфейса - от разработки бизнес-логики или обратно. конечная логика ( модель ), чтобы представление не зависело от какой-либо конкретной платформы модели. ViewModel из MVVM является преобразователем значение, [1] то есть ViewModel несет ответственность за подвергая (преобразование) в объекты данныхиз модели таким образом, чтобы объекты легко управлялись и представлялись. В этом отношении модель представления больше модель, чем представление, и обрабатывает большую часть, если не всю логику отображения представления. [1] Модель представления может реализовывать шаблон посредника , организуя доступ к внутренней логике вокруг набора вариантов использования, поддерживаемых представлением.
MVVM - это вариант паттерна проектирования «Модель презентации» Мартина Фаулера . [2] [3] Он был изобретен архитекторами Microsoft Кеном Купером и Тедом Петерсом специально для упрощения событийно-ориентированного программирования пользовательских интерфейсов. Шаблон был включен в Windows Presentation Foundation (WPF) ( графическая система Microsoft .NET ) и Silverlight (производное Интернет-приложение WPF). [3] Джон Госсман, один из архитекторов Microsoft WPF и Silverlight, объявил о MVVM в своем блоге в 2005 году. [3] [4]
Модель – представление – модель представления также называется связывателем модель – представление – представление , особенно в реализациях, не связанных с платформой .NET. ZK ( фреймворк веб-приложений, написанный на Java ) и KnockoutJS ( библиотека JavaScript ) используют связующее устройство модель – представление. [3] [5] [6]
Компоненты паттерна MVVM
- Модель
- Модель относится либо к модели предметной области , которая представляет контент реального состояния (объектно-ориентированный подход), либо к уровню доступа к данным , который представляет контент (подход, ориентированный на данные). [ необходима цитата ]
- Вид
- Как и в шаблонах модель – представление – контроллер (MVC) и модель – представление – презентатор (MVP), представление - это структура, макет и внешний вид того, что пользователь видит на экране. [7] Он отображает представление модели и принимает взаимодействие пользователя с представлением (щелчки мыши, ввод с клавиатуры, жесты касания экрана и т. Д.), А также передает их обработку модели представления через привязку данных (свойства , обратные вызовы событий и т. д.), который определен для связывания представления и модели представления.
- Посмотреть модель
- Модель представления - это абстракция представления, представляющая общедоступные свойства и команды. Вместо контроллера шаблона MVC или презентатора шаблона MVP, MVVM имеет привязку , которая автоматизирует связь между представлением и его связанными свойствами в модели представления. Модель представления описывается как состояние данных в модели. [8]
- Основное различие между моделью представления и презентатором в шаблоне MVP заключается в том, что у презентатора есть ссылка на представление, а у модели представления - нет. Вместо этого представление напрямую привязывается к свойствам модели представления для отправки и получения обновлений. Для эффективной работы требуется технология привязки или генерация шаблонного кода для привязки. [7]
- Связующее
- Декларативные данные и привязка команд неявны в шаблоне MVVM. В стеке решений Microsoft связыватель - это язык разметки, называемый XAML . [9] Связующее освобождает разработчика от необходимости писать шаблонную логику для синхронизации модели представления и представления. При реализации за пределами стека Microsoft наличие технологии декларативного связывания данных делает возможным этот шаблон [5] [10], а без привязки обычно вместо этого используется MVP или MVC и приходится писать больше шаблонов (или сгенерируйте его с помощью другого инструмента).
Обоснование
MVVM был разработан для удаления практически всего кода графического интерфейса пользователя (« код программной части ») из уровня представления с помощью функций привязки данных в WPF (Windows Presentation Foundation), чтобы лучше отделить разработку уровня представления от остальной части шаблона. [3] Вместо того, чтобы требовать от разработчиков взаимодействия с пользователем (UX) писать код GUI, они могут использовать язык разметки инфраструктуры (например, XAML ) и создавать привязки данных к модели представления, которая написана и поддерживается разработчиками приложений. Разделение ролей позволяет интерактивным дизайнерам сосредоточиться на потребностях UX, а не на программировании бизнес-логики. Таким образом, уровни приложения можно разрабатывать в нескольких рабочих потоках для повышения производительности. Даже когда один разработчик работает со всей базой кода, правильное разделение представления от модели более продуктивно, поскольку пользовательский интерфейс обычно меняется часто и в конце цикла разработки на основе отзывов конечных пользователей. [ необходима цитата ]
Шаблон MVVM пытается получить оба преимущества разделения функциональной разработки, обеспечиваемые MVC, в то же время используя преимущества привязки данных и фреймворка путем привязки данных как можно ближе к чистой модели приложения. [3] [4] [11] [ требуется пояснение ] Он использует связыватель, модель представления и функции проверки данных любых бизнес-уровней для проверки входящих данных. В результате модель и структура управляют как можно большим количеством операций, устраняя или сводя к минимуму логику приложения, которая напрямую управляет представлением (например, код программной части).
Критика
Джон Госсман и Винсент.Л раскритиковали шаблон MVVM и его применение в конкретных случаях, заявив, что MVVM может быть "излишним" при создании простых пользовательских интерфейсов. Он считает, что для более крупных приложений предварительное обобщение модели представления может быть затруднено и что привязка крупномасштабных данных может привести к снижению производительности. [12]
Реализации
.NET фреймворки
- Библиотека Prism
- Caliburn / Caliburn.Micro
- WindowsCommunityToolkit
- DevExpress MVVM
- Проект с открытым исходным кодом DotVVM
- Набор инструментов MVVMLight
- ReactiveUI
- Набор инструментов Mugen MVVM
- Uno Framework - открытый исходный код
- Rascl
- MvvmCross
- FreshMvvm
Фреймворки JavaScript
- Угловой
- Аурелия
- Дюрандаль
- Ember.js
- Внешний JS
- Knockout.js
- Omi.js
- Oracle JET
- Reactjs
- Svelte
- Vue.js
Смотрите также
- Многоуровневая архитектура
Рекомендации
- ^ a b Группы Google. «Мысль: MVVM устраняет 99% необходимости в ValueConverters» .
- ^ Мартин Фаулер (19 июля 2004 г.). «Шаблон дизайна презентационной модели» . Мартин Фаулер. Com.
- ^ а б в г д е Смит, Джош (февраль 2009 г.). «Приложения WPF с шаблоном проектирования Модель – Представление – Модель представления» . Журнал MSDN .
- ^ а б Госсман, Джон (8 октября 2005 г.). «Сказки от Smart Client: Введение в шаблон Модель / Представление / Модель представления для создания приложений WPF» .
- ^ а б Мэсси, Саймон. «Паттерны презентации в ZK» . Проверено 24 марта 2012 года .
- ^ Стив Сандерсон. «KnockoutJS» .
- ^ а б "Паттерн MVVM" . msdn.microsoft.com . Проверено 29 августа +2016 .
- ^ Пит Вайсброд. «Модель – представление – шаблон ViewModel для WPF: еще один подход» . Архивировано из оригинала 1 февраля 2008 года.
- ^ Вильдермут, Шон. «Привязка данных Windows Presentation Foundation: Часть 1» . Microsoft . Проверено 24 марта 2012 года .
- ^ «ЗК МВВМ» . Potix . Проверено 24 марта 2012 года .
- ^ Карл Шиффлетт. «Изучение WPF MV-VM» . Архивировано из оригинального 13 апреля 2009 года . Проверено 5 июня 2009 года .
- ^ Джон Госсман. «Сказки от умного клиента: достоинства и недостатки MV-VM» . Цитировать журнал требует
|journal=
( помощь )
Внешние ссылки
- «Как реализовать MVVM (Model – View – ViewModel) в TDD (разработка через тестирование)» . Сеть разработчиков Microsoft . Microsoft.
- «Введение в шаблон Model / View / ViewModel для создания приложений WPF» . Сеть разработчиков Microsoft . Microsoft.
- Логика проверки MVVM , написанная на Java Тимом Клэром
- «Понимание MVVM: руководство для разработчиков JavaScript» . AddysOnmani.com .
- «Пошаговое руководство по MVVM» . learnmvvm.com .