stringtranslate.com

Модель–вид–видмодель

Модель–представление–модель представления ( MVVM ) — это архитектурный шаблон в компьютерном программном обеспечении, который облегчает разделение разработки графического пользовательского интерфейса (GUI; представления ) — будь то с помощью языка разметки или кода GUI — от разработки бизнес-логики или внутренней логики ( модели ) таким образом, что представление не зависит от какой-либо конкретной платформы модели.

Viewmodel MVVM — это преобразователь значений, [1] то есть он отвечает за экспонирование (преобразование) объектов данных из модели таким образом, чтобы ими можно было легко управлять и представлять. В этом отношении viewmodel — это больше модель , чем view , и обрабатывает большую часть (если не всю) логики отображения view. [1] Viewmodel может реализовывать шаблон mediator , организуя доступ к внутренней логике вокруг набора вариантов использования, поддерживаемых view.

MVVM — это разновидность шаблона проектирования Presentation Model Мартина Фаулера . [2] [3] Он был изобретен архитекторами Microsoft Кеном Купером и Тедом Питерсом специально для упрощения событийно-управляемого программирования пользовательских интерфейсов. Шаблон был включен в Windows Presentation Foundation (WPF) (графическая система .NET от Microsoft ) и 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]
Главное различие между моделью представления и презентатором в шаблоне MVP заключается в том, что презентатор имеет ссылку на представление, тогда как модель представления — нет. Вместо этого представление напрямую привязывается к свойствам модели представления для отправки и получения обновлений. Для эффективной работы требуется технология привязки или генерация шаблонного кода для привязки. [7]
В объектно-ориентированном программировании модель представления иногда можно назвать объектом передачи данных . [9]
Связующее
Декларативные данные и привязка команд неявно присутствуют в шаблоне MVVM. В стеке решений Microsoft связующим элементом является язык разметки XAML . [10] Связующий элемент освобождает разработчика от необходимости писать шаблонную логику для синхронизации модели представления и представления. При реализации вне стека Microsoft наличие технологии декларативной привязки данных делает этот шаблон возможным, [5] [11] а без связующего элемента обычно вместо этого используют MVP или MVC и приходится писать больше шаблонного кода (или генерировать его с помощью какого-либо другого инструмента).

Обоснование

MVVM был разработан для удаления практически всего кода GUI (« code-behind ») из слоя представления с помощью функций привязки данных в WPF (Windows Presentation Foundation) для лучшего разделения разработки слоя представления от остальной части шаблона. [3] Вместо того, чтобы требовать от разработчиков пользовательского опыта (UX) писать код GUI, они могут использовать язык разметки фреймворка (например, XAML ) и создавать привязки данных к модели представления, которая пишется и поддерживается разработчиками приложений. Разделение ролей позволяет интерактивным дизайнерам сосредоточиться на потребностях UX, а не на программировании бизнес-логики. Таким образом, слои приложения могут разрабатываться в нескольких рабочих потоках для более высокой производительности. Даже когда один разработчик работает над всей кодовой базой, надлежащее разделение представления от модели более продуктивно, поскольку пользовательский интерфейс обычно часто и поздно меняется в цикле разработки на основе отзывов конечного пользователя. [ необходима цитата ]

Шаблон MVVM пытается получить оба преимущества разделения функциональной разработки, предоставляемые MVC, при этом используя преимущества привязок данных и фреймворка, привязывая данные как можно ближе к чистой модели приложения. [3] [4] [12] [ необходимо разъяснение ] Он использует связующее устройство, модель представления и любые функции проверки данных бизнес-слоев для проверки входящих данных. Результатом является то, что модель и фреймворк управляют как можно большим количеством операций, устраняя или минимизируя логику приложения, которая напрямую манипулирует представлением (например, code-behind).

Критика

Джон Госсман раскритиковал шаблон MVVM и его применение в конкретных случаях, заявив, что MVVM может быть «излишним» при создании простых пользовательских интерфейсов. Он считает, что для более крупных приложений предварительное обобщение viewmodel может быть сложным, а крупномасштабное связывание данных может привести к снижению производительности. [13]

Реализации

.NET-фреймворки

Библиотеки веб-компонентов

JavaScript-фреймворки

Фреймворки для C++ и XAML (Windows)

Смотрите также

Ссылки

  1. ^ ab Smith, Josh; et al. «Мысль: MVVM устраняет 99% потребности в ValueConverters». Группы Google .
  2. Мартин Фаулер (19 июля 2004 г.). «Презентационная модель проектирования». Martin Fowler.com.
  3. ^ abcdef Смит, Джош (февраль 2009 г.). «Приложения WPF с шаблоном проектирования Model–View–ViewModel». Журнал MSDN .
  4. ^ ab Госсман, Джон (8 октября 2005 г.). «Рассказы от умного клиента: Введение в шаблон Модель/Представление/Модель представления для создания приложений WPF».
  5. ^ ab Massey, Simon (9 апреля 2011 г.). "Шаблоны представления в ZK" . Получено 24 марта 2012 г.
  6. ^ Стив Сандерсон. «KnockoutJS».
  7. ^ ab "The MVVM Pattern". msdn.microsoft.com . 4 октября 2012 г. Получено 29 августа 2016 г.
  8. ^ Пит Вайсброд. "Model–View–ViewModel Pattern for WPF: Yet another approach". Архивировано из оригинала 1 февраля 2008 г.
  9. ^ Microsoft (3 апреля 2024 г.). «Учебник: создание веб-API с помощью ASP.NET Core».
  10. ^ Wildermuth, Shawn (11 мая 2010 г.). "Windows Presentation Foundation Data Binding: Часть 1". Microsoft . Получено 24 марта 2012 г. .
  11. ^ "ZK MVVM". Potix . Получено 24 марта 2012 .
  12. ^ Карл Шиффлетт. "Изучение WPF MV-VM". Архивировано из оригинала 13 апреля 2009 г. Получено 5 июня 2009 г.
  13. ^ Госсман, Джон (4 марта 2006 г.). «Рассказы от умного клиента: преимущества и недостатки MV-VM». AI Skills Challenge .