
Model-view-viewmodel (MVVM) é um padrão de arquitetura de software ou esquema de design de software. É uma variante do padrão “Presentation Model Design” de Martin Fowler.
O MVVM abstrai o status “view” e o comportamento. Enquanto o modelo de “apresentação” abstrai uma visão (cria um modelo de visão) de uma maneira que não depende de uma plataforma de interface de usuário específica.
O MVVM foi desenvolvido por Ken Cooper e Ted Peters da Microsoft para simplificar a programação de eventos de interfaces de usuário usando recursos do Windows Presentation Foundation (WPF) (Microsoft .NET Graphical System) e do Silverlight (Derivative Internet Application). O padrão arquitetônico foi anunciado pela primeira vez no blog John Gossman em 2005.
Model (modelo)
- O modelo no MVVM é uma implementação do modelo de domínio do aplicativo que inclui um modelo de dados juntamente com a lógica de negócios e a lógica de validação.
- Exemplos de objetos de modelo incluem repositórios, objetos de negócios, objetos de transferência de dados (DTOs), objetos CLR antigos e simples (pocos) e objetos gerados por entidades e proxy.
View (visão):
- A visão é responsável por definir a estrutura, o layout e a aparência do que o usuário vê na tela.
- Idealmente, a exibição é definida exclusivamente com XAML, com um número limitado de code-behinds que não contém lógica de negócios.
View Model:
- O modelo de visão age como um intermediário entre a visão e o modelo, e é responsável por gerenciar a lógica da visão.
- Geralmente, o modelo de visualização interage com o modelo invocando métodos nas classes de modelo.
- O modelo de vista, em seguida, fornece dados do modelo em uma forma que a visão pode facilmente usar.
Binder (fichário):
- O mecanismo fundamental para esse padrão com o qual o modelo de exibição e a exibição são constantemente sincronizados. Geralmente por meio de uma sintaxe declarativa dentro da própria exibição.
- Isso implica que as alterações nos dados feitas pelo usuário por meio da visualização serão relatadas automaticamente no modelo de visualização. Sem esse ônus para o desenvolvedor.
Da mesma forma, quaisquer alterações feitas nos dados contidos no modelo de exibição serão representadas automaticamente na exibição.