Menu
Home Explore People Places Arts History Plants & Animals Science Life & Culture Technology
On this page
Model–view–viewmodel
Software architecture design pattern

Model–view–viewmodel (MVVM) is an architectural pattern that promotes the separation of a graphical user interface (view) from the business logic (model). The viewmodel acts as a value converter exposing data objects from the model to the view, often implementing a mediator pattern to manage use cases. MVVM, a variation of Martin Fowler's Presentation Model pattern, was created by Microsoft architects to simplify event-driven programming and integrated into Windows Presentation Foundation (WPF) and Silverlight. It’s also known as model–view–binder, used by frameworks like ZK and KnockoutJS.

We don't have any images related to Model–view–viewmodel yet.
We don't have any YouTube videos related to Model–view–viewmodel yet.
We don't have any PDF documents related to Model–view–viewmodel yet.
We don't have any Books related to Model–view–viewmodel yet.
We don't have any archived web articles related to Model–view–viewmodel yet.

Components of MVVM pattern

Model Model refers either to a domain model, which represents real state content (an object-oriented approach), or to the data access layer, which represents content (a data-centric approach). View As in the model–view–controller (MVC) and model–view–presenter (MVP) patterns, the view is the structure, layout, and appearance of what a user sees on the screen.11 It displays a representation of the model and receives the user's interaction with the view (mouse clicks, keyboard input, screen tap gestures, etc.), and it forwards the handling of these to the view model via the data binding (properties, event callbacks, etc.) that is defined to link the view and view model. View model The view model is an abstraction of the view exposing public properties and commands. Instead of the controller of the MVC pattern, or the presenter of the MVP pattern, MVVM has a binder, which automates communication between the view and its bound properties in the view model. The view model has been described as a state of the data in the model.12 The main difference between the view model and the Presenter in the MVP pattern is that the presenter has a reference to a view, whereas the view model does not. Instead, a view directly binds to properties on the view model to send and receive updates. To function efficiently, this requires a binding technology or generating boilerplate code to do the binding.13 Under object-oriented programming, the view model can sometimes be referred to as a data transfer object.14 Binder Declarative data and command-binding are implicit in the MVVM pattern. In the Microsoft solution stack, the binder is a markup language called XAML.15 The binder frees the developer from being obliged to write boiler-plate logic to synchronize the view model and view. When implemented outside of the Microsoft stack, the presence of a declarative data binding technology is what makes this pattern possible,1617 and without a binder, one would typically use MVP or MVC instead and have to write more boilerplate (or generate it with some other tool).

Rationale

MVVM was designed to remove virtually all GUI code ("code-behind") from the view layer, by using data binding functions in WPF (Windows Presentation Foundation) to better facilitate the separation of view layer development from the rest of the pattern.18 Instead of requiring user experience (UX) developers to write GUI code, they can use the framework markup language (e.g. XAML) and create data bindings to the view model, which is written and maintained by application developers. The separation of roles allows interactive designers to focus on UX needs rather than programming of business logic. The layers of an application can thus be developed in multiple work streams for higher productivity. Even when a single developer works on the entire codebase, a proper separation of the view from the model is more productive, as the user interface typically changes frequently and late in the development cycle based on end-user feedback.

The MVVM pattern attempts to gain both advantages of separation of functional development provided by MVC, while leveraging the advantages of data bindings and the framework by binding data as close to the pure application model as possible.192021 It uses the binder, view model, and any business layers' data-checking features to validate incoming data. The result is that the model and framework drive as much of the operations as possible, eliminating or minimizing application logic which directly manipulates the view (e.g., code-behind).

Criticism

John Gossman has criticized the MVVM pattern and its application in specific uses, stating that MVVM can be "overkill" when creating simple user interfaces. For larger applications, he believes that generalizing the viewmodel upfront can be difficult, and that large-scale data binding can lead to lower performance.22

Implementations

.NET frameworks

  • .NET Community Toolkit
  • Avalonia
  • Caliburn, Caliburn.Micro
  • Chinook.DynamicMvvm Open source
  • DevExpress MVVM
  • DotVVM open source project
  • FreshMvvm
  • Jellyfish
  • Mugen MVVM Toolkit
  • MVVMLight Toolkit
  • MvvmCross
  • MvvmZero
  • Prism Library
  • Rascl
  • ReactiveUI
  • Uno Platform - Open source

Web Component libraries

  • Microsoft FAST
  • Omi.js

Java frameworks

JavaScript frameworks

Frameworks for C++ and XAML (Windows)

  • Xamlcc

See also

References

  1. Smith, Josh; et al. "Thought: MVVM eliminates 99% of the need for ValueConverters". Google Groups. https://groups.google.com/forum/#!topic/wpf-disciples/P-JwzRB_GE8

  2. Smith, Josh; et al. "Thought: MVVM eliminates 99% of the need for ValueConverters". Google Groups. https://groups.google.com/forum/#!topic/wpf-disciples/P-JwzRB_GE8

  3. Martin Fowler (19 July 2004). "The Presentation Model Design Pattern". Martin Fowler.com. http://martinfowler.com/eaaDev/PresentationModel.html

  4. Smith, Josh (February 2009). "WPF Apps with the Model–View–ViewModel Design Pattern". MSDN Magazine. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

  5. Smith, Josh (February 2009). "WPF Apps with the Model–View–ViewModel Design Pattern". MSDN Magazine. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

  6. Smith, Josh (February 2009). "WPF Apps with the Model–View–ViewModel Design Pattern". MSDN Magazine. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

  7. Gossman, John (8 October 2005). "Tales from the Smart Client: Introduction to Model/View/ViewModel pattern for building WPF apps". https://docs.microsoft.com/en-us/archive/blogs/johngossman/introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps

  8. Smith, Josh (February 2009). "WPF Apps with the Model–View–ViewModel Design Pattern". MSDN Magazine. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

  9. Massey, Simon (9 April 2011). "Presentation Patterns in ZK". Retrieved 24 March 2012. https://www.slideshare.net/simbo1905/design-patterns-in-zk-java-mvvm-as-modelviewbinder

  10. Steve Sanderson. "KnockoutJS". http://knockoutjs.com/documentation/observables.html

  11. "The MVVM Pattern". msdn.microsoft.com. 4 October 2012. Retrieved 29 August 2016. https://msdn.microsoft.com/en-us/library/hh848246.aspx

  12. Pete Weissbrod. "Model–View–ViewModel Pattern for WPF: Yet another approach". Archived from the original on 1 February 2008. https://web.archive.org/web/20080201101909/http://www.acceptedeclectic.com/2008/01/model-view-viewmodel-pattern-for-wpf.html

  13. "The MVVM Pattern". msdn.microsoft.com. 4 October 2012. Retrieved 29 August 2016. https://msdn.microsoft.com/en-us/library/hh848246.aspx

  14. Microsoft (3 April 2024). "Tutorial: Create a web API with ASP.NET Core". https://learn.microsoft.com/en-us/aspnet/core/tutorials/first-web-api

  15. Wildermuth, Shawn (11 May 2010). "Windows Presentation Foundation Data Binding: Part 1". Microsoft. Retrieved 24 March 2012. http://msdn.microsoft.com/en-us/library/aa480224.aspx

  16. Massey, Simon (9 April 2011). "Presentation Patterns in ZK". Retrieved 24 March 2012. https://www.slideshare.net/simbo1905/design-patterns-in-zk-java-mvvm-as-modelviewbinder

  17. "ZK MVVM". Potix. Retrieved 24 March 2012. http://books.zkoss.org/wiki/Small_Talks/2012/February/New_Features_of_ZK_6#ZK_MVVM

  18. Smith, Josh (February 2009). "WPF Apps with the Model–View–ViewModel Design Pattern". MSDN Magazine. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

  19. Smith, Josh (February 2009). "WPF Apps with the Model–View–ViewModel Design Pattern". MSDN Magazine. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

  20. Gossman, John (8 October 2005). "Tales from the Smart Client: Introduction to Model/View/ViewModel pattern for building WPF apps". https://docs.microsoft.com/en-us/archive/blogs/johngossman/introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps

  21. Karl Shifflett. "Learning WPF M-V-VM". Archived from the original on 13 April 2009. Retrieved 5 June 2009. https://web.archive.org/web/20090413205731/http://karlshifflett.wordpress.com/2008/11/08/learning-wpf-m-v-vm/

  22. Gossman, John (4 March 2006). "Tales from the Smart Client: Advantages and disadvantages of M-V-VM". AI Skills Challenge. https://docs.microsoft.com/en-gb/archive/blogs/johngossman/advantages-and-disadvantages-of-m-v-vm