Модель-представление-представление-модель

Модель-представление-модель ( MVVM ) — это архитектурный шаблон в компьютерном программном обеспечении, который облегчает отделение разработки графического пользовательского интерфейса (GUI; представление ) — будь то с помощью языка разметки или кода графического интерфейса — от разработки бизнеса . логика или внутренняя логика ( модель ), чтобы представление не зависело от какой-либо конкретной платформы модели.
Модель представления MVVM — это преобразователь значений, [ 1 ] это означает, что он отвечает за представление (преобразование) объектов данных из модели таким образом, чтобы ими можно было легко управлять и представлять. В этом отношении модель представления является более модельной , чем представление , и обрабатывает большую часть (если не всю) логику отображения представления. [ 1 ] Модель представления может реализовать шаблон посредника , организуя доступ к внутренней логике вокруг набора вариантов использования, поддерживаемых представлением.
MVVM — это вариант шаблона проектирования «Модель представления» Мартина Фаулера . [ 2 ] [ 3 ] Он был изобретен архитекторами Microsoft Кеном Купером и Тедом Питерсом специально для упрощения событийно-ориентированного программирования пользовательских интерфейсов. Шаблон был включен в Windows Presentation Foundation (WPF) (графическая система Microsoft .NET ) и Silverlight , производное интернет-приложение WPF. [ 3 ] Джон Госсман, архитектор Microsoft WPF и Silverlight, анонсировал MVVM в своем блоге в 2005 году. [ 3 ] [ 4 ]
Модель-представление-представлениемодель также называется модель-представление-привязка , особенно в реализациях, не использующих платформу .NET . ZK , платформа веб-приложений, написанная на Java , и JavaScript библиотека KnockoutJS используют связыватель модель-представление. [ 3 ] [ 5 ] [ 6 ]
Компоненты шаблона MVVM
[ редактировать ]- Модель
- Модель относится либо к модели предметной области , которая представляет контент реального состояния (объектно-ориентированный подход), либо к уровню доступа к данным , который представляет контент (подход, ориентированный на данные). [ нужна ссылка ]
- Вид
- Как и в шаблонах модель-представление-контроллер (MVC) и модель-представление-презентатор (MVP), представление — это структура, макет и внешний вид того, что пользователь видит на экране. [ 7 ] Он отображает представление модели и получает взаимодействие пользователя с представлением (щелчки мыши, ввод с клавиатуры, жесты касания экрана и т. д.), а также перенаправляет обработку этих действий в модель представления через привязку данных (свойства, обратные вызовы событий). и т. д.), который определен для связи представления и модели представления.
- Посмотреть модель
- Модель представления — это абстракция представления, предоставляющая общедоступные свойства и команды. Вместо контроллера шаблона MVC или презентатора шаблона MVP в MVVM имеется связующее , которое автоматизирует связь между представлением и его связанными свойствами в модели представления. Модель представления описывается как состояние данных в модели. [ 8 ]
- Основное различие между моделью представления и Presenter в шаблоне MVP заключается в том, что у Presenter есть ссылка на представление, а у модели представления — нет. Вместо этого представление напрямую привязывается к свойствам модели представления для отправки и получения обновлений. Для эффективной работы требуется технология привязки или генерация шаблонного кода для выполнения привязки. [ 7 ]
- В рамках объектно-ориентированного программирования модель представления иногда можно назвать объектом передачи данных . [ 9 ]
- связующее
- Декларативные данные и привязка команд неявно присутствуют в шаблоне MVVM. В стеке решений Microsoft связующим является разметки язык XAML . [ 10 ] Связующее освобождает разработчика от необходимости писать стандартную логику для синхронизации модели представления и представления. При реализации за пределами стека Microsoft наличие технологии декларативной привязки данных делает этот шаблон возможным. [ 5 ] [ 11 ] а без связующего вместо этого обычно можно использовать MVP или MVC, и вам придется писать больше шаблонов (или генерировать их с помощью какого-либо другого инструмента).
Обоснование
[ редактировать ]MVVM был разработан для удаления практически всего графического интерфейса кода (« код программной части ») из уровня представления с помощью функций привязки данных в WPF (Windows Presentation Foundation), чтобы лучше облегчить отделение разработки уровня представления от остальной части шаблона. [ 3 ] Вместо того, чтобы требовать от разработчиков пользовательского интерфейса (UX) писать код графического пользовательского интерфейса, они могут использовать язык разметки платформы (например, XAML ) и создавать привязки данных к модели представления, которая пишется и поддерживается разработчиками приложений. Разделение ролей позволяет интерактивным дизайнерам сосредоточиться на потребностях UX, а не на программировании бизнес-логики. Таким образом, уровни приложения можно разрабатывать в нескольких рабочих потоках для повышения производительности. Даже когда над всей базой кода работает один разработчик, правильное разделение представления и модели более продуктивно, поскольку пользовательский интерфейс обычно меняется часто и на поздних стадиях цикла разработки на основе отзывов конечных пользователей. [ нужна ссылка ]
Шаблон MVVM пытается получить оба преимущества разделения функциональной разработки, обеспечиваемые MVC, одновременно используя преимущества привязки данных и инфраструктуры, привязывая данные как можно ближе к чистой модели приложения. [ 3 ] [ 4 ] [ 12 ] [ нужны разъяснения ] Для проверки входящих данных он использует связующее устройство, модель представления и функции проверки данных всех бизнес-уровней. В результате модель и платформа управляют максимально возможным количеством операций, устраняя или минимизируя логику приложения, которая напрямую манипулирует представлением (например, код программной части).
Критика
[ редактировать ]Джон Госсман раскритиковал шаблон MVVM и его применение в конкретных целях, заявив, что MVVM может быть «излишним» при создании простых пользовательских интерфейсов. Он считает, что для более крупных приложений предварительное обобщение модели представления может оказаться затруднительным, а крупномасштабная привязка данных может привести к снижению производительности. [ 13 ]
Реализации
[ редактировать ].NET-фреймворки
[ редактировать ]- Библиотека Призма
- Калиберн, Калиберн.Микро
- Инструментарий сообщества .NET
- ДевЭкспресс МВВМ
- Chinook.DynamicMvvm с открытым исходным кодом
- DotVVM проект с открытым исходным кодом
- FreshMvvm
- Медуза
- Набор инструментов MVVMLight
- Набор инструментов Mugen MVVM
- Реактивный пользовательский интерфейс
- Платформа Uno — открытый исходный код
- Раскл
- МввмКросс
- МввмЗеро
Библиотеки веб-компонентов
[ редактировать ]- Microsoft БЫСТРЫЙ
- Оми.js
JavaScript-фреймворки
[ редактировать ]Платформы для C++ и XAML (Windows)
[ редактировать ]- Ксамлкк
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б Смит, Джош; и др. «Мысль: MVVM устраняет на 99% необходимость в преобразователях значений» . Группы Google .
- ^ Мартин Фаулер (19 июля 2004 г.). «Шаблон проектирования презентационной модели» . Мартин Фаулер.com.
- ^ Jump up to: а б с д и ж Смит, Джош (февраль 2009 г.). «Приложения WPF с шаблоном проектирования Модель–Представление–ViewModel» . Журнал MSDN .
- ^ Jump up to: а б Госсман, Джон (8 октября 2005 г.). «Истории Smart Client: введение в шаблон Model/View/ViewModel для создания приложений WPF» .
- ^ Jump up to: а б Мэсси, Саймон (9 апреля 2011 г.). «Схемы представления в ЗК» . Проверено 24 марта 2012 г.
- ^ Стив Сандерсон. «НокаутJS» .
- ^ Jump up to: а б «Шаблон MVVM» . msdn.microsoft.com . 4 октября 2012 года . Проверено 29 августа 2016 г.
- ^ Пит Вайсброд. «Шаблон Model–View–ViewModel для WPF: еще один подход» . Архивировано из оригинала 1 февраля 2008 года.
- ^ Microsoft (3 апреля 2024 г.). «Руководство. Создание веб-API с помощью ASP.NET Core» .
- ^ Вильдермут, Шон (11 мая 2010 г.). «Привязка данных Windows Presentation Foundation: Часть 1» . Майкрософт . Проверено 24 марта 2012 г.
- ^ «ЗК МВВМ» . Потикс . Проверено 24 марта 2012 г.
- ^ Карл Шиффлетт. «Изучение WPF MV-VM» . Архивировано из оригинала 13 апреля 2009 года . Проверено 5 июня 2009 г.
- ^ Госсман, Джон (4 марта 2006 г.). «Байки смарт-клиента: преимущества и недостатки MV-VM» . Конкурс навыков искусственного интеллекта .